C/C++奇怪语法之 = 0;

在C中,尤其是C++中,= 0是一个非常常见和奇怪的语法之一。
0,在基本的上下文中被评估为int型的整数字面值,这个是最容易理解的。它能够被读.不能够写。就算用它赋值给浮点数,也是整数字面值并加上类型转换完成的。同时,赋值给bool也是转换。C/C++规定,0转换为bool表示false。这儿似乎没有什么更多可以说的了,不过别急。
把0赋值给指针表示该指针不知向任何对象。而不是表示该指针指向处于地址0的对象。0在C/C++的世界里经常表现为没有,不存在这个意思。
我们还能看到的一个比较奇怪的语法是吧0赋值给某个函数,这个函数一定是类的成员函数,并且必须是虚的。就象这样:

class C
{
public:
virtual void f(void) = 0;
};

这表明什么呢?想想我们前面的说法,它表示没有,不在这儿的意思。这就是著名的纯虚函数,表明该函数没有实现(奇怪的是,C++允许纯虚函数有实现,不过我还没有搞懂这样做的意义),必须由子类实现该函数。

顺便说一下,构造有时候也与0有关。
看这个:

int i = int();

你可能会觉得奇怪,谁会这样写代码呢?可是,这其实是合法的代码,这样想:int作为一种类型,int()显然就是调用这种类型的默认构造函数,这个构造函数构造一个int对象,默认值是0。奇怪么?

其实一点都不奇怪,C++本来可以不允许这样的语法存在的,不过由于引入了模版,这一切都变得必然了,聪明的,直到为什么了吧。

既然说的初始化,我再说说数组的初始化吧。

T a[n] = {x, y, z, ……};

这个是典型的数组初始化,但是,如果后面花括号里面的值的个数比n少会怎样?呵呵,C/C++规定,缺的那些值为0。注:新版的C99允许离散的元素初始化,语法是:

T a[n] = {[0] = x, [8] = y, [100] = z, ……};

没有赋值的元素默认值仍然是0。

现在大家应该能理解下面这个赋值了吧。

char msg[128] = {0};

这就是说,msg的128个元素所有的值都是0。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值