Quando compilo ed eseguo il codice seguente con counter++
o ++counter
sostituito per x
, l'output è identico; in entrambi i casi, i numeri 1 - 10:In un ciclo for, c'è una differenza tra pre/post-incremento di una variabile di controllo del ciclo in termini di quantità totale di iterazioni?
for (int counter = 1; counter < 11; x)
{
std::cout << counter << endl;
}
Inizialmente ho pensato che sarebbe ++counter
incrementerà di 1 e quindi restituire il nuovo valore prima per l'espressione booleana nell'intestazione ciclo è stata valutata. Ad esempio, quando si inizia con counter = 1
e si utilizza ++counter
, counter
avrà un valore 2 nell'espressione booleana. Questo sembra non essere il caso, in quanto entrambe le uscite sono identiche piuttosto che la versione ++counter
con una iterazione in meno, come mi aspettavo.
Lettura in giro, appare ++counter
e counter++
incremento counter
di 1 all'inizio o alla fine del corpo del ciclo rispettivamente. In tal caso non si tratta, almeno concettualmente, di un'azione identica? Perché la fine e l'inizio del ciclo sono la stessa cosa una volta che il ciclo ha superato la prima iterazione.
L'unica volta posso vedere questo fare la differenza è nella prima iterazione, dove dovrebbe uscita 1 per la console se viene utilizzato std::cout << counter << endl;
counter++
(perché 1 viene aggiunto al contatore alla fine del ciclo). Mentre std::cout << counter << endl;
deve inviare 2 alla console se viene utilizzato ++counter
(perché 1 viene aggiunto al contatore all'inizio del ciclo).
Oltre alla domanda di cui sopra, la prego di spiegare con precisione l'ordine in cui i tre azioni vengono valutate nell'intestazione ciclo for, e spiegare esattamente dove si verificano le iterazioni quando si utilizza i++
e ++i
.
Grazie mille!
In breve: No, non c'è alcuna differenza per il numero di iterazioni. –
Vedere [** for loop **] (http://en.cppreference.com/w/cpp/language/for). – juanchopanza
In quel punto del loop, sono equivalenti. Si noti inoltre che i compilatori scambieranno quasi certamente il post-incremento con un pre-incremento in quel luogo, almeno quando le ottimizzazioni sono attivate. – stj