我能保证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
本身没有地址可以拿
我知道 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
本身没有地址可以拿