z++ + z++ sollte doch wenn z 4 ist; 8 ergeben und z
anschließend 6 sein, oder irre ich mich da?
ebenso ++z + ++z sollte 12 sein.
Würde man vermuten, tatsächlich ist das Verhalten für diesen Ausdruck nicht definiert. Der C++ Standard spricht von sogenannten „sequence points“, die Einfluß darauf nehmen, wann ein Object verändert werden kann/darf. Auf dem gcc 2.95.2 ist z=5, auf dem Sun CC ist z=6.
Beispielsweise wird ein sequence point gesetzt, sobald eine Funktion aufgerufen wird. Wäre z kein int sondern deine eigene Klasse mit entsprechend überladenen Operatoren, so sieht das Ergebnis aus, wie du es erwarten würdest.
Der operator-++ angewendet auf einen int ist keine echte Funktion, vielmehr verhält es sich so, als würde ein Funktion aufgerufen. Der C++ Compiler setzte dieses Ausdruck in Maschinensprache um, daher wirst du in der Standard-Bibliothek keine Funktionen für diesen Operator finden.
Ingesamt sollte man solche Ausdrücke vermeiden. So treten weniger Fehler auf und der Code ist für dritte besser lesbar. Spätestens wenn du dich in er Parameterliste einer Funktion befindest, gelten wieder andere Regeln. Hier stellt sich die Frage, werden die Parameter von link-nach-recht ausgewertet oder umgekehrt => compiler-spezifisch
Gruß Markus