在C++标准中是否保证如果我有两个值相等并且类型相同的指针,它们的值都为nullptr,那么这两个指针之间的差异是否等于0?
用伪数学符号表示,以下谓词是否成立?
对于所有x和y,(x == nullptr)^(y == nullptr) -> (x - y == 0)
我能想到的最简单的代码示例是:
int* x = nullptr;
int* y = nullptr;
assert(x - y == 0);
我认为这可以简化为一个问题: 是否可能有一种有效的C++标准实现,其中nullptr具有多个位表示,并且仅通过等于比较运算符进行比较,因为相等运算符执行了某些魔法操作?
x
和y
看作 "两个空指针" 或者 "两个空指针值",而不是你在问题标题中说的 "两个 nullptr 值",那么你会更好地理解 C++ 标准和其术语。等于某个东西、使用某个东西进行初始化以及实际上 是 某个东西这些概念是不同的,请尽量不要混淆它们。nullptr
不仅仅是 "空指针" 的缩写(当然,这也是其名称的原因),它是一个非常具体的东西。 - Steve Jessop