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