2011-09-13 12 views
7
cout<<(x++)++; //fails 
cout<<++(++x); //passes 

Perché l'incremento di post ha esito negativo? Lo vedo accadere ma non sono sicuro della ragione tecnica.Operatore post incremento ++

+2

post-incremento temporaneo? – Benoit

+0

Qual è il tipo di 'x'? Ciò conta molto. Se è un built-in, 'operator ++' non è una chiamata di funzione. – MSalters

+0

E 'costruito in dire, int x = 5; – user835194

risposta

13

x++ restituisce un valore in modo che non sia possibile eseguire nuovamente ++. D'altra parte, ++x restituisce un lvalue in modo da poter eseguire ++ su di esso.

+1

vedi anche [questa domanda] (http://stackoverflow.com/questions/371503/why-is-i-considered-an-l-value-but-i-is-not) – Benoit

4

In questo modo gli operatori di incremento funzionano in C/C++.

Se si mette la ++ dopo la variabile (incremento postfix), l'intera espressione restituisce il valore della variabile prima di incremento.

Se si inserisce ++ prima della variabile (incremento prefisso), l'espressione restituisce il valore dopo l'operazione di incremento.

Mentre l'operazione di prefisso restituisce un riferimento alla variabile passata, la versione postfissa restituisce un valore temporaneo, che non deve essere incrementato.

1

Esattamente. non puoi eseguire un ++ su un valore Rvalue. una buona spiegazione su come funziona il valore di rvalue è here.

Problemi correlati