【发布时间】:2014-12-28 23:20:45
【问题描述】:
C++ 标准是否保证如果我有两个相同类型的指针,其值等于 nullptr,那么这些指针之间的差等于 0?
在伪数学符号中,以下谓词是否成立?
ForAll x ForAll y (x == nullptr)^(y == nullptr) -> (x - y == 0)
我能想到的最简单的代码示例是:
int* x = nullptr;
int* y = nullptr;
assert(x - y == 0);
我想这可以归结为:是否有可能有一个有效的 C++ 标准实现,其中有多个 nullptr 的位表示只能比较为相等,因为相等运算符有一些魔力?
【问题讨论】:
-
如果您将
x和y视为“两个空指针”或“两个空指针值”,而不是“正如您在问题标题中所说的,两个 nullptr 值。等同于某物,被初始化使用某物,实际上被是某物都是不同的概念,最好不要混用。nullptr不仅仅是“空指针”的缩写(当然这就是名称的由来),它是一个非常具体的东西。