Eu sei que a aritmética do ponteiro não é permitida para ponteiros nulos. Mas imagine que eu tenho algo parecido com isto:
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)
É possível (permitido) ter a end()
implementação acima ? Ou é necessário ter:
int *end() const { return (arraySize == 0) ? nullptr : (arrayBegin + arraySize); }
evitar aritmética de ponteiro com nullptr porque arrayBegin
é nulo para uma matriz vazia (apesar de arraySize
também ser zero neste caso)?
Eu sei que é possível armazenar int *end;
, em vez de unsigned size;
e deixe o tamanho ser computada como end-begin
- mas, em seguida, vem a mesma questão: É permitido calcular nullptr - nullptr
?
Eu apreciaria especialmente as referências padrão.
fonte