Jar*_*k C 10 c++ null pointer-arithmetic
我知道指针算法不允许用于空指针。但想象一下我有这样的事情:
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)
Run Code Online (Sandbox Code Playgroud)
是否有可能(允许)进行上述end()实现?或者是否有必要拥有:
int *end() const { return (arraySize == 0) ? nullptr : (arrayBegin + arraySize); }
Run Code Online (Sandbox Code Playgroud)
避免使用 nullptr 进行指针运算,因为arrayBegin空数组为 null(尽管arraySize在这种情况下也为零)?
我知道可以存储int *end;而不是unsigned size;让大小计算为end-begin- 但随之而来的是同样的问题:是否允许计算nullptr - nullptr?
我会特别欣赏标准参考。
是的,您可以将零添加到空指针并从另一个空指针中减去一个。引用C++ 标准的加法运算符[expr.add]部分:
当一个
J整数类型的表达式P与指针类型的表达式相加或相减时,结果的类型为P。
- 如果
P计算结果为空指针值且J计算结果为 0,则结果为空指针值。