我知道空指针不允许使用指针算术。但是想象一下我有这样的东西:
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
?
特别感谢您提供标准参考。
是的,您可以向空指针添加零,并从另一个中减去一个空指针。
8.7 7
如果将值0添加到空指针值或从空指针值中减去,则结果为空指针值。如果两个为空指针值相减,结果比较等于值0,转换为类型std :: ptrdiff_t。