Ich weiß, dass Zeigerarithmetik für Nullzeiger nicht zulässig ist. Aber stell dir vor, ich habe so etwas:
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)
Ist es möglich (erlaubt), die obige end()
Implementierung zu haben ? Oder ist es notwendig zu haben:
int *end() const { return (arraySize == 0) ? nullptr : (arrayBegin + arraySize); }
Zeigerarithmetik mit nullptr zu vermeiden, weil arrayBegin
null für ein leeres Array ist (obwohl arraySize
es in diesem Fall auch Null ist)?
Ich weiß, dass es möglich ist, die Größe zu speichern, int *end;
anstatt sie unsigned size;
zu berechnen, end-begin
aber dann kommt das gleiche Problem: Darf sie berechnet werden nullptr - nullptr
?
Ich würde mich besonders über Standardreferenzen freuen.
quelle