c++ - 空指针等价于 int

标签 c++ null pointers

在“The C++ Programming Language”中,Bjarne 写道,空指针与整数零不同,而是 0 可以用作空指针的指针初始值设定项。这是否意味着:

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

最佳答案

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

reinterpret_cast 没有特别规定在将空指针转换为 int 时产生零。您可以通过使用 bool 运算符来实现,它将使用 01 初始化变量:

int castPointer = (voidPointer != 0);

关于c++ - 空指针等价于 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1642763/

相关文章:

c++ - 在 for 循环中使用 erase() 只删除第一行

c++ - 为什么 gcc 生成一个 memmove 而不是 memcpy 来复制 std::vector<>?

c - !var 和 var != NULL 一样吗?

list - 表示一个 nil 列表和/或一个 list(nil)

c# - 检查整数是否== null

c++ - 具有非指针/引用返回类型的协变返回类型

c++ - 为什么最后两个打印语句在类型转换指针 'ptr' 后不打印任何内容?

c++ - ERROR_IO_PENDING 后的多个 WriteFile

c++ - 在代码生成后更改 llvm::Function 签名,在最后一个 CreateRet 之前

c - 如何检查指针 (void) 的值不为零(尝试取消引用通用指针)