【发布时间】:2020-04-12 00:14:41
【问题描述】:
我知道空指针不允许指针算术。但是想象一下我有这样的东西:
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