首页 > 解决方案 > 我能保证nullptr的地址总是0吗?

问题描述

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

#include <iostream>

using namespace std;

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

标签: c++c++11nullptr

解决方案


是的。

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

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

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

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

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


推荐阅读