减去两个nullptr值保证为零?

时间:2014-12-28 23:20:46

标签: c++ c++11

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只能比较为相等,因为相等运算符会产生一些魔力?

1 个答案:

答案 0 :(得分:11)

是的,这是有效的。它在C中是未定义的,但是C ++为-运算符添加了一个特殊的例外来定义行为。

  

5.7添加剂运算符[expr.add]

     

7如果将值0添加到指针值或从指针值中减去,则结果将比较原始指针值。如果两个指针指向同一个对象,或者两个指针都指向同一个数组的末尾或两者都为空,并且减去了两个指针,则结果将比较等于转换为类型{{1的值0 }}