null指针与int的等价

Tre*_*ent 3 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
Run Code Online (Sandbox Code Playgroud)

Joh*_*itb 5

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

reinterpret_cast在将空指针强制转换为int时,没有特殊规定可以产生零.您可以通过使用布尔运算,这将初始化变量,无论是实现这一目标01:

int castPointer = (voidPointer != 0);
Run Code Online (Sandbox Code Playgroud)