Originariamente inviato da Lancill
Salve a tutti, ad un'occhiata veloce, il seguente pezzo di codice dovrebbe dare in output 1... invece da 0.

Qualcuno di voi mi riesce a spiegare perchè succede questa cosa?
Il post-incremento si "perde". La prima cosa che fa è valutare la espressione. La espressione i++, essendo un post-incremento (quindi fatto dopo) porta a valutare subito i che vale 0. Viene quindi eseguito il post-incremento. E infine la assegnazione. Ma la assegnazione viene fatta con il valore che è stato "valutato" all'inizio!!! Quindi viene assegnato 0.

Se ci fosse:

codice:
int i = 0;
i = i++ + i++;
Stampi 1. È vero che ci sono 2 post-incrementi ma l'ultimo si perde. Anche qui prima valuta gli operandi: il primo operando i++ viene valutato 0, poi viene fatto il post-incremento. In questo frangente i vale 1. Il secondo operando i++ viene valutato 1, poi viene fatto il post-incremento tale per cui i diventa 2.
Ma poi viene fatta la somma e i valori sommati sono quelli valutati all'inizio cioè 0 e 1. Risultato: 1.