在“C ++编程语言”中,Bjarne写道空指针与整数零不同,但是0可以用作空指针的指针初始化器。这是否意味着:
void * voidPointer = 0;
int zero = 0;
int castPointer = reinterpret_cast<int>(voidPointer);
assert(zero == castPointer) // this isn't necessarily true
答案 0 :(得分:5)
是的,这意味着castPointer
不一定为零,并且断言可能会失败。因为当空指针常量为零时,某种类型的空指针不一定是所有位为零的地址。
reinterpret_cast
没有特殊规定在向int转换空指针时产生零。您可以通过使用布尔运算符来实现这一点,该运算符将使用0
或1
初始化变量:
int castPointer = (voidPointer != 0);