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