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. Manche der Operatoren in der Tabelle sind Ihnen im Augenblick noch nicht bekannt, wie z.B. der Operator -> oder auch new. Sie werden selbstverständlich im weiteren Verlaufe des Kurses noch behandelt.

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 letzte Spalte Auswertung gibt an, in welcher Reihenfolge die einzelnen Operatoren abgearbeitet werden. So werden z.B. arithmetischen Ausdrücke mit gleichrangigen Operanden immer von links nach rechts abgearbeitet. Zuweisungen hingegen werden immer von rechts nach links abgearbeitet.

Denken Sie immer daran, dass Sie die Reihenfolge der Operationen durch entsprechende Klammerung jederzeit abändern können.

Schreiben Sie  NIEMALS Anweisungen in folgender Form:

     nVar = ++nVar + 1; oder
     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 Anweisungen auf. Wenn Sie mehr zu diesem Thema wissen wollen, schauen Sie einmal in Ihrer Online-Hilfe oder auf dem Internet unter side-effects oder sequence-points nach.