我知道NULL总是如此0,但是为什么下面的代码会打印该消息?
#include <iostream>
using namespace std;
int main() {
int* ptr = nullptr;
if (ptr == 0) {
cout << "Does it always work?";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是的。
初始化的指针nullptr是空指针。
将空指针与文字0(或与 a std::nullptr_t,即nullptr;它们一起称为空指针常量)进行比较true,始终会产生 。
不过,你不能用任何旧的表达式来做到这一点;即使整数i为 1,i-i也不是有效的空指针常量,尽管在运行时评估为 0。如果您尝试这样做,您的程序将无法编译。只有文字 0才是可以与指针进行比较的有效空指针常量。
而且,这并不一定意味着它的所有位都为零!就像将 a 转换bool为int0 或 1 一样,但 a 的实际底层位bool可以是实现喜欢的任何内容。
最后,请注意您的术语略有偏差;per[support.types.nullptr/1]本身nullptr没有可取的地址