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 arrayBeginest 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.