Reihenfolge der Auswertung
In diesem Abschnitt wird die Reihenfolge der Auswertung von Ausdrücken behandelt, es werden jedoch nicht die Syntax oder die Semantik der Operatoren in diesen Ausdrücken erläutert. Die vorherigen Abschnitte enthalten eine vollständige Referenz für diese Operatoren.
Ausdrücke werden entsprechend der Rangfolge und Gruppierung ihrer Operatoren ausgewertet. (Operatorrangfolge und Assoziativität unter Lexikalische Konventionen zeigt die Beziehungen, die die C++-Operatoren für Ausdrücke vorgeben.) Betrachten Sie das folgende Beispiel:
Beispiel
// expre_pluslang__pluslang_Order_of_Evaluation.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main()
{
int a = 2, b = 4, c = 9;
cout << a + b * c << "\n";
cout << a + (b * c) << "\n";
cout << (a + b) * c << "\n";
}
Ausgabe
38
38
54
Reihenfolge der Auswertung von Ausdrücken
Die Reihenfolge der Auswertung des in der obigen Abbildung dargestellten Ausdrucks wird durch die Reihenfolge und die Assoziativität der Operatoren bestimmt:
Multiplikation (*) weist die höchste Priorität in diesem Ausdruck auf. Daher wird der Teilausdruck b * c zuerst ausgewertet.
Addition (+) besitzt die zweithöchste Priorität, sodass a dem Produkt von b und c hinzugefügt wird.
Nach links (<<) hat die niedrigste Priorität im Ausdruck, es gibt jedoch zwei Vorkommen. Da der Left Shift-Operator von links nach rechts gruppiert, wird zuerst der linke und dann der rechte Teilausdruck ausgewertet.
Wenn Teilausdrücke mit Klammern gruppiert werden, werden die Rangfolge sowie die Reihenfolge der Auswertung des Ausdrucks geändert, wie in der folgenden Abbildung gezeigt.
Reihenfolge der Auswertung von Ausdrücken mit Klammern
Ausdrücke, wie in der Abbildung oben, werden ausschließlich für ihre Nebeneffekte ausgewertet – in diesem Fall, um Informationen zum Standardausgabegerät zu übertragen.