Sé que la aritmética de punteros no está permitida para punteros nulos. Pero imagina que tengo algo como esto:
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)
¿Es posible (permitido) tener la end()
implementación anterior ? O es necesario tener:
int *end() const { return (arraySize == 0) ? nullptr : (arrayBegin + arraySize); }
para evitar la aritmética del puntero con nullptr porque arrayBegin
es nulo para una matriz vacía (a pesar de arraySize
ser también cero en este caso)?
Sé que es posible almacenar en int *end;
lugar de unsigned size;
y permitir que el tamaño se calcule como end-begin
, pero luego surge el mismo problema: ¿se puede calcular nullptr - nullptr
?
Agradecería especialmente las referencias estándar.
fuente