Corrail
2005-09-14, 17:46:04
Hello!
Nach eine kleiner Disskussion sind wir auf ein nettes C++ Quests gestoßen. Und zwar ist uns folgende C++ Zeile eingefallen:
int i = 0;
++i = i++ + ++i;
Komischer Weise hat i nach dieser Zeile den Wert 5 (kompilier mit GCC) was wir uns nicht erklären können...
Wieso hat i nach dieser Zeile den Wert 5? Eigentlich sollte es ja so ausgewertet werden:
= operator von rechts nach links:
also zuerst i++ + ++i auswerten
+ operator von links nach recht
zuerst i++
haben wir auf der rechten seite des = operator 0 stehen
dann wirkt das ++, i hat den wert 1
als nächstes das ++ von ++i, i hat den wert 2
also haben wir auf der rechten seite vom = operator 2 stehen
dann linke seite vom operator= auswerten: ++i , i hat den wert 3
dann wird der = operator ausgewertet und 2 wird auf ++i (was eine referenz auf i ist) zugewiesen
somit sollte i nach dieser zeile 2 haben
Ist das eine Eigenheit vom GCC oder hab ich da einen Denkfehler?
Nach eine kleiner Disskussion sind wir auf ein nettes C++ Quests gestoßen. Und zwar ist uns folgende C++ Zeile eingefallen:
int i = 0;
++i = i++ + ++i;
Komischer Weise hat i nach dieser Zeile den Wert 5 (kompilier mit GCC) was wir uns nicht erklären können...
Wieso hat i nach dieser Zeile den Wert 5? Eigentlich sollte es ja so ausgewertet werden:
= operator von rechts nach links:
also zuerst i++ + ++i auswerten
+ operator von links nach recht
zuerst i++
haben wir auf der rechten seite des = operator 0 stehen
dann wirkt das ++, i hat den wert 1
als nächstes das ++ von ++i, i hat den wert 2
also haben wir auf der rechten seite vom = operator 2 stehen
dann linke seite vom operator= auswerten: ++i , i hat den wert 3
dann wird der = operator ausgewertet und 2 wird auf ++i (was eine referenz auf i ist) zugewiesen
somit sollte i nach dieser zeile 2 haben
Ist das eine Eigenheit vom GCC oder hab ich da einen Denkfehler?