Я знаю, что арифметика указателей запрещена для нулевых указателей. Но представьте, у меня есть что-то вроде этого:
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?
Я был бы особенно признателен за стандартные ссылки.