Con un ciclo for
puoi spostare l'istruzione post vuota e spostarla nella parte inferiore del codice nel loop:
for (int i = 0; i < 10; /* empty */ ) {
//...
++i;
}
Ma in questo caso non ti guadagna nulla; ancora più importante rende il codice più difficile da leggere, come ci si aspetterebbe che ++i
risiedesse nella parte superiore dell'istruzione come post-dichiarazione.
Quindi quando è valido spostare la post-dichiarazione dalla sua solita posizione a qualche parte all'interno del ciclo?
Modifica Il codice che mi ha fatto riflettere su questa domanda che ho ricevuto da C ++ Primer :
for (T* p = first_free; p != elements; /* empty */)
alloc.destroy(--p);
Qui first_free
è un puntatore al primo elemento libero in una matrice di oggetti da distruggere in ordine inverso e elements
è un puntatore al primo oggetto nella matrice. Qui mi sembra, valido per spostare --p
da una post-dichiarazione nel ciclo, perché altrimenti dovresti riscrivere il codice in quanto tale:
for (T* p = first_free - 1; p != elements; --p)
alloc.destroy(p);
Qui il codice si imbatterebbe in problemi se l'array non contiene effettivamente alcun oggetto, in quanto salteresti su elements
e quindi causerebbe un arresto anomalo (o almeno un comportamento non definito). Ciò significa che è necessario un ulteriore controllo prima del ciclo, se la matrice contiene effettivamente o meno elementi.