我能保证nullptr的地址永远为0吗?

Can I guarantee that the address of nullptr is always 0?

我知道 NULL 总是 0,但为什么下面的代码会打印消息?

#include <iostream>

using namespace std;

int main() {
    int* ptr = nullptr;
    if (ptr == 0) {
        cout << "Does it always work?";
    }
    return 0;
}

是。

nullptr初始化的指针是空指针。

将空指针与文字 0(或 std::nullptr_t 进行比较,其中 nullptr 是;它们一起是 空指针常量) 总是产生 true

不过,您不能使用任何旧表达式来执行此操作;即使整数 i 为 1,i-i 也不是有效的空指针常量,尽管在运行时评估为 0。您的 如果您尝试这样做,程序将无法编译。只有 literal 0 是可以与指针进行比较的有效空指针常量。

此外,这并不一定意味着它的所有位都为零!就像将 bool 转换为 int 给你零或一一样,但是 bool 的实际底层位可以是实现喜欢的任何东西。

最后,请注意您的术语略有偏差; per[support.types.nullptr/1],nullptr本身没有地址可以拿