C++ Kurs

Rangfolge der Operatoren

Zum vorläufigen Abschluss der Behandlung der Operatoren folgt in tabellarischer Form die Rangfolge aller Operatoren. In der Tabelle gilt: Operatoren in der Gruppe 1 werden vor den Operatoren der Gruppe 2 ausgeführt usw. Einige der Operatoren in der Tabelle sind Ihnen im Augenblick noch nicht bekannt, wie z.B. der Operator -> oder auch new. Diese Operatoren werden selbstverständlich noch behandelt werden.

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

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

Die Reihenfolge der Operationen kann jedoch durch entsprechende Klammerung jederzeit abändert werden.

AchtungSchreiben Sie  NIEMALS Anweisungen in folgender Form:
     nVar = ++nVar + 1; oder auch
     cout << *pcPtr++ << ',' << *pcPtr++ << endl;

Das Verhalten einer Anweisung ist in der Regel undefiniert, wenn eine Variable innerhalb einer Anweisung mehrfach verändert wird! Teilen Sie die Anweisung auf mehrere einzelne Anweisungen auf. Wenn Sie mehr zu diesem Thema wissen wollen, schauen Sie einmal in Ihrer Online-Hilfe zum Compiler oder auf dem Internet unter side-effects oder sequence-points nach.