首页 > 解决方案 > 是否允许向空指针添加零?

问题描述

我知道空指针不允许指针算术。但想象一下我有这样的事情:

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++nullpointer-arithmetic

解决方案


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

J具有整数类型的表达式被添加到指针类型的表达式或从P指针类型的表达式中减去时,结果的类型为P.

  • 如果P计算为空指针值并J计算为 0,则结​​果为空指针值。

推荐阅读