是否允许向空指针添加零?

Is it allowed to add a zero to a null pointer?

我知道空指针不允许指针运算。但是想象一下我有这样的东西:

class MyArray {
  int *arrayBegin;  // pointer to the first array item, NULL for an empty array
  unsigned arraySize;   // size of the array, zero for an empty array
public:
  int *begin() const { return arrayBegin; }
  int *end() const { return arrayBegin + arraySize; }  // possible? (arrayBegin may be null)

是否可以(允许)实现上述end()?或者是否有必要:

  int *end() const { return (arraySize == 0) ? nullptr : (arrayBegin + arraySize); }

避免使用 nullptr 进行指针运算,因为 arrayBegin 对于空数组为空(尽管 arraySize 在这种情况下也为零)?

我知道可以存储 int *end; 而不是 unsigned size; 并将大小计算为 end-begin - 但随后出现了同样的问题:是否允许计算 nullptr - nullptr?

我特别感谢标准参考文献。

是的,您可以将空指针加零并从另一个空指针中减去一个。引用 C++ 标准的加法运算符 [expr.add] 部分:

When an expression J that has integral type is added to or subtracted from an expression P of pointer type, the result has the type of P.

  • If P evaluates to a null pointer value and J evaluates to 0, the result is a null pointer value.