是否可以将零添加到空指针?


9

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

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对于空数组为null(尽管arraySize在这种情况下也为零)?

我知道可以存储int *end;而不是,unsigned size;并且可以将大小计算为end-begin-,但是出现相同的问题:是否可以计算nullptr - nullptr

我特别喜欢标准参考书。

Answers:


8

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

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

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

8
什么是“ 8.7 7”?如果您参考的是C ++标准,请指定哪一个。通常,最好在方括号中使用节“名称”,因为节/章/段落的编号通常随每个标准版本而变化。在当前草案中,相关部分为[expr.add]第4.15.1段。
丹尼尔·兰格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.