2010-07-19 3 views
3

Possible Duplicate:
Why is ++i considered an l-value, but i++ is not?mélange opérateurs incrémenter/décrémenter post et pré sur la même variable

En C++ (et aussi en C), si j'écris:

++x-- 
++(x--) 

i obtenir l'erreur: lvalue nécessaire que incrémenter l'opérande

Cependant, (++x)-- compile. Je suis confus.

+10

S'il vous plaît ne pas faire cela me fait mal aux yeux. :) – InsertNickHere

+4

Copie possible de http://stackoverflow.com/questions/371503/why-is-i-considered-an-l-value-but-i-- non –

+0

'gcc' ne compilera pas' (++ x) - 'ici,' g ++ 'volonté. Idem pour '++ i = 5;' – mvds

Répondre

9

Les opérateurs de post-incrémentation et de pré-incrémentation ne travaillent que sur les valeurs lues.

Lorsque vous appelez ++i, la valeur de i est incrémentée, puis i est renvoyée. En C++, la valeur de retour est la variable et est une lvalue.

Lorsque vous appelez i++ (ou i--), la valeur de retour est la valeur de i avant d'être incrémentée. C'est une copie de l'ancienne valeur et ne correspond pas à la variable i donc il ne peut pas être utilisé comme une lvalue.

De toute façon, ne faites pas cela, même si elle compile.

+0

@Jerry: Je l'ai juste arrangé pour lui, avec une autre édition mineure. –

+4

+1 pour 'Ne faites pas ceci, même s'il compile. '. :-) –