Rangfolge der Operatoren

In der Tabelle gilt: Operatoren in Gruppe 1 werden vor den Operatoren der Gruppe 2 ausgeführt usw. Einige der Operatoren in der Tabelle dürften im Augenblick noch unbekannt sein. Diese Operatoren werden später behandelt.

Die letzte Spalte Auswertung gibt an, in welcher Reihenfolge die Operanden abgearbeitet werden. So werden z.B. arithmetische Ausdrücke mit gleichrangigen Operanden immer von links nach rechts abgearbeitet, Zuweisungen hingegen rechts nach links.

Gruppe Operator Bedeutung Auswertung
1 :: Zugriffsoperator links->rechts
2 (...) Funktionsaufruf links->rechts
[...] Indizierung
-> und . Zugriff auf Klassenelement
++ und -- Post-Inkrement/Dekrement
DTYP(...) Typkonvertierung
3 ! und ~ NOT und 1er-Komplement rechts->links
+ und - Vorzeichen
++ und -- Pre-Inkrement/Dekrement
& Adressoperator
* Dereferenzierungsoperator
sizeof Größenoperator
new und delete dynamische Speicherverwaltung
(DTYP)... Typkonvertierung
co_wait Coroutine unterbrechen
4 .* und ->* Indirekter Zugriff auf Klassenelement links->rechts
5 * und / und % Arithmetische Operatoren links->rechts
6 + und - Arithmetische Operatoren links->rechts
7 << und >> Schiebeoperatoren links->rechts
9 < und <= und
> und >=
Vergleichsoperatoren links->rechts
10 == und != Vergleichsoperatoren links->rechts
11 & UND Bitoperator links->rechts
12 ^ EXCLUSIV-ODER Bitoperator links->rechts
13 | ODER Bitoperator links->rechts
14 && logischer UND Operator links->rechts
15 || logischer ODER Operator links->rechts
16 ?: Bedingungsoperator rechts->links
= und *= und /= und
= und += und -= und
&= und ^= und= und
<<= und >>=
Zuweisungsoperatoren
throw Ausnahme auslösen
co_yield Coroutine unterbrechen
17 , Komma-Operator links->rechts

Vermeiden Sie so weit wie möglich Anweisungen in folgender Form:

nVar = ++nVar + 1; // oder auch
std::cout << *pcPtr++ << ',' << *pcPtr++ << '\n';

Obwohl die Reihenfolge der Operationen seit C++17 genauer spezifiziert ist, kann das Ergebnis einer Anweisung undefiniert sein, wenn ein Datum innerhalb einer Anweisung (direkt oder indirekt z.B. durch den Aufruf einer Funktion) mehrfach verändert wird! Teilen Sie die Anweisung in mehrere einzelne Anweisungen auf. Wenn Sie mehr zu diesem Thema wissen wollen, suchen Sie im Internet nach den Begriffen side-effects oder sequence-points.