null指针与int的等价

时间:2009-10-29 10:27:41

标签: c++ null pointers

在“C ++编程语言”中,Bjarne写道空指针与整数零不同,但是0可以用作空指针的指针初始化器。这是否意味着:

void * voidPointer = 0;
int zero = 0;
int castPointer = reinterpret_cast<int>(voidPointer);
assert(zero == castPointer) // this isn't necessarily  true

1 个答案:

答案 0 :(得分:5)

是的,这意味着castPointer不一定为零,并且断言可能会失败。因为当空指针常量为零时,某种类型的空指针不一定是所有位为零的地址。

reinterpret_cast没有特殊规定在向int转换空指针时产生零。您可以通过使用布尔运算符来实现这一点,该运算符将使用01初始化变量:

int castPointer = (voidPointer != 0);