Integrierte C++-Operatoren, Rangfolge und Zuordnung

Die Sprache C++ umfasst alle C-Operatoren und fügt mehrere neue Operatoren hinzu. Operatoren legen eine Bewertung fest, die an einem oder mehreren Operanden auszuführen ist.

Rangfolge und Assoziativität

Die Rangfolge des Operators gibt die Reihenfolge der Vorgänge in Ausdrücken an, die mehr als einen Operator enthalten. Die Operatorassoziivität gibt an, ob in einem Ausdruck, der mehrere Operatoren mit der gleichen Rangfolge enthält, ein Operand mit dem Operanden links oder rechts gruppiert wird.

Alternative Schreibweisen

C++ gibt alternative Rechtschreibungen für einige Operatoren an. In C werden die alternativen Schreibweisen als Makros im <Iso646.h-Header> bereitgestellt. In C++ sind diese Alternativen Schlüsselwort (keyword), und die Verwendung von <iso646.h> oder der C++-äquivalenten <ciso646> ist veraltet. In Microsoft C++ ist die Option oder /Za die /permissive- Compileroption erforderlich, um die alternativen Schreibweisen zu aktivieren.

Rangfolge und Zuordnungstabelle für C++-Operatoren

Die folgende Tabelle zeigt die Rangfolge und Assoziativität von C++-Operatoren (in absteigender Rangfolge). Operatoren mit derselben Rangfolgenzahl haben die gleiche Rangfolge, es sei denn, es wird eine andere Beziehung explizit durch Klammern erzwungen.

Operatorbeschreibung Operator Alternative
Rangfolge der Gruppe 1, keine Zuordnung
Bereichsauflösung ::
Rangfolge der Gruppe 2, von links nach rechts assoziativ
Elementauswahl (Objekt oder Zeiger) . oder ->
Array-Tiefgestellt []
Funktionsaufruf ()
Postfix-Inkrement ++
Postfix-Dekrementierung --
Typname typeid
Konstantentypkonvertierung const_cast
Dynamische Typkonvertierung dynamic_cast
Neuinterpretierte Typkonvertierung reinterpret_cast
Konvertierung statischer Typ static_cast
Rangfolge der Gruppe 3, von rechts nach links assoziativ
Größe des Objekts oder Typs sizeof
Präfixinkrementierung ++
Präfix-Dekrementierung --
Ergänzung ~ compl
Logisch nicht ! not
Unäre Negation -
Unär plus +
Adresse von &
Dereferenzierung *
Create object (Objekt erstellen) new
Objekt zerstören delete
Cast ()
Gruppe 4 Rangfolge, von links nach rechts assoziativ
Zeiger-zu-Member (Objekte oder Zeiger) .* oder ->*
Gruppe 5 Rangfolge, von links nach rechts assoziativ
Multiplikation *
Division /
Modul %
Rangfolge der Gruppe 6, von links nach rechts assoziativ
Addition +
Subtraktion -
Rangfolge der Gruppe 7, von links nach rechts assoziativ
Verschiebung nach links <<
Verschiebung nach rechts >>
Rangfolge der Gruppe 8, von links nach rechts assoziativ
Kleiner als <
Größer als >
Kleiner als oder gleich <=
Größer als oder gleich >=
Rangfolge der Gruppe 9, von links nach rechts assoziativ
Gleichheit ==
Ungleichheit != not_eq
Gruppierung 10 Rangfolge von links nach rechts nach rechts
Bitweises AND & bitand
Rangfolge der Gruppe 11, von links nach rechts assoziativ
Bitweise exklusiv ODER ^ xor
Rangfolge der Gruppe 12, von links nach rechts nach rechts
Bitweise inklusive OR | bitor
Rangfolge der Gruppe 13, von links nach rechts nach rechts
Logisches AND && and
Gruppe 14 Rangfolge, von links nach rechts assoziivität
Logisches OR || or
Rangfolge der Gruppe 15, von rechts nach links, Assoziivität
Bedingt ? :
Abtretung =
Multiplikationszuweisung *=
Abteilungszuweisung /=
Moduluszuweisung %=
Additionszuweisung +=
Subtraktionszuweisung -=
Zuordnung der linken Schicht <<=
Zuordnung mit der rechten Schicht >>=
Bitweise UND Zuordnung &= and_eq
Bitweise inklusive OR-Zuordnung |= or_eq
Bitweise exklusive OR-Zuweisung ^= xor_eq
Ausdruck auslösen throw
Rangfolge der Gruppe 16, von links nach rechts assoziativ
Comma ,

Siehe auch

Operatorüberladung