是否允许将零添加到空指针?

问题描述 投票:2回答:1

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

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++ null pointer-arithmetic
1个回答
2
投票

是的,您可以向空指针添加零,并从另一个中减去一个空指针。

8.7 7

如果将值0添加到空指针值或从空指针值中减去,则结果为空指针值。如果两个为空指针值相减,结果比较等于值0,转换为类型std :: ptrdiff_t。

© www.soinside.com 2019 - 2024. All rights reserved.