Mögliche Duplikate:
Nicht definierte Verhaltens- und Sequenzpunkte
Was ist der Wert von x
nach diesem Code?
In Java ist das Ergebnis 12, aber in C ++ ist das Ergebnis 13.
Ich habe den Operator-Vorrang von Java und C ++ gegoogelt und sie sehen gleich aus. Warum unterscheiden sich die Ergebnisse? Liegt es am Compiler?
In Java ist es so definiert, dass es mit 12 bewertet wird. Es wird wie folgt ausgewertet:
%Vor% Der linke Operand von +
(++ x) wird aufgrund von Bewerten Sie zuerst den linken Operanden . Siehe auch diese vorherige Antwort , und dieses , zu ähnlichen Themen, mit Links zum Standard.
In C ++ ist das Verhalten nicht definiert, weil Sie x dreimal ohne einen dazwischen liegenden Sequenzpunkt . <ändern / p>
Die Operatorpriorität bestimmt, wie Operanden zur Berechnung des Ergebnisses gruppiert werden. Es regelt nicht unbedingt die Reihenfolge der Anwendung von Nebenwirkungen.
In C ++ werden die Operatoren ++
vor dem Operator +
berechnet (obwohl dies nur in ++x
eine Rolle spielt, da der Wert von x++
mit x
identisch ist). Der Nebeneffekt des Inkrementierens von x
geschieht vor dem nächsten Sequenzpunkt in C ++, und das ist alles, was wir sagen können, und der einzige Sequenzpunkt in diesem Ausdruck ist, nachdem er vollständig ausgewertet wurde, einschließlich der Zuweisung. Darüber hinaus ist das Ergebnis der mehrfachen Änderung eines Objekts zwischen den einzelnen Sequenzpunkten explizit undefiniert, entsprechend dem Standard.
Gegebenes undefiniertes Verhalten, die typische Implementierung wird etwas tun, das von den Details abhängt, wie die Implementierungssequenzen das Verhalten definiert haben, und so erhalten Sie oft ein konsistentes Ergebnis, wenn Sie bei einer Version eines Compilers bleiben.
Tags und Links java c++ operator-precedence