Je sais que l'arithmétique des pointeurs est interdite pour les pointeurs nuls. Mais imaginez que j'ai quelque chose comme ça:
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)
Est-il possible (autorisé) d'avoir la end()
mise en œuvre ci-dessus ? Ou faut-il avoir:
int *end() const { return (arraySize == 0) ? nullptr : (arrayBegin + arraySize); }
éviter l'arithmétique du pointeur avec nullptr car arrayBegin
est nul pour un tableau vide (bien qu'il soit arraySize
également nul dans ce cas)?
Je sais qu'il est possible de stocker int *end;
au lieu de unsigned size;
et de laisser la taille être calculée comme end-begin
- mais vient alors le même problème: est-il autorisé à calculer nullptr - nullptr
?
J'apprécierais particulièrement les références standard.
la source