Wiem, że arytmetyka wskaźników jest niedozwolona dla wskaźników zerowych. Ale wyobraź sobie, że mam coś takiego:
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)
Czy to możliwe (dozwolone) mieć powyższą end()
implementację? Czy też konieczne jest posiadanie:
int *end() const { return (arraySize == 0) ? nullptr : (arrayBegin + arraySize); }
aby uniknąć arytmetyki wskaźnika z nullptr, ponieważ arrayBegin
jest pusty dla pustej tablicy (mimo arraySize
że w tym przypadku jest również zerowy)?
Wiem, że można przechowywać int *end;
zamiast unsigned size;
i pozwalać na obliczanie rozmiaru jako end-begin
- ale wtedy pojawia się ten sam problem: czy można to obliczyć nullptr - nullptr
?
Byłbym szczególnie wdzięczny za standardowe referencje.
źródło