在"C++编程语言"中,Bjarne写道空指针与整数零不相同,而是0可以用作空指针的指针初始化器.这是否意味着:
void * voidPointer = 0;
int zero = 0;
int castPointer = reinterpret_cast<int>(voidPointer);
assert(zero == castPointer) // this isn't necessarily true
Run Code Online (Sandbox Code Playgroud)
是的,这意味着它castPointer不一定是零,并且断言可能会失败.因为当空指针常量为零时,某种类型的空指针不一定是所有位为零的地址.
reinterpret_cast在将空指针强制转换为int时,没有特殊规定可以产生零.您可以通过使用布尔运算,这将初始化变量,无论是实现这一目标0或1:
int castPointer = (voidPointer != 0);
Run Code Online (Sandbox Code Playgroud)