Präfix-Inkrement- und Dekrementoperatoren: ++ und --

Syntax

++ unary-expression
-- unary-expression

Hinweise

Der Präfix-Inkrementoperator (++) fügt einen Wert zu seinem Operanden hinzu. Das Ergebnis des Ausdrucks ist dieser inkrementierte Wert. Der Operand muss ein l-Wert sein, der kein const-Typ ist. Das Ergebnis ist ein L-Wert des gleichen Typs wie der Operand.

Der Präfix-Dekrementoperator (--) entspricht dem Präfix-Inkrementoperator. Der einzige Unterschied besteht darin, dass der Operand um einen Wert verringert wird. Das Ergebnis ist dieser dekrementierte Wert.

Visual Studio 2017, Version 15.3 und höher (verfügbar im /std:c++17-Modus und höher): Der Operand eines Inkrement- oder Dekrementoperators ist möglicherweise nicht vom Typ bool.

Sowohl Präfix- als auch Postfixinkrement und Dekrementoperatoren beeinflussen ihre Operanden. Der wesentliche Unterschied zwischen ihnen besteht in der Reihenfolge von Inkrement und Dekrement bei der Auswertung eines Ausdrucks. (Weitere Informationen finden Sie unter Postfix-Inkrementoperatoren und Postfix-Dekrementoperatoren). In der Präfix-Form findet das Inkrement oder Dekrement statt, bevor der Wert in der Ausdrucksauswertung verwendet wird. Daher ist der Wert des Ausdrucks ungleich dem Wert des Operanden. In der Postfix-Form findet das Inkrement oder Dekrement statt, nachdem der Wert in der Ausdrucksauswertung verwendet wird, daher ist der Wert des Ausdrucks der gleiche wie der Wert des Operanden. Zum Beispiel gibt das folgende Programm "++i = 6" aus:

// expre_Increment_and_Decrement_Operators.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;

int main() {
   int i = 5;
   cout << "++i = " << ++i << endl;
}

Ein Operand vom Typ "Ganzzahl" oder "Gleitkomma" wird durch den ganzzahligen Wert 1 inkrementiert oder dekrementiert. Der Ergebnistyp entspricht dem Operandentyp. Ein Operand vom Zeigertyp wird um die Größe des von ihm adressierten Objekts inkrementiert oder dekrementiert. Ein inkrementierter Zeiger verweist auf das nächste Objekt. Ein dekrementierter Zeiger verweist auf das vorherige Objekt.

Da Inkrement- und Dekrementoperatoren Nebeneffekte haben, kann die Verwendung von Ausdrücken mit Inkrement- oder Dekrementoperatoren unerwünschte Ergebnisse in einem Präprozessormakro haben. Betrachten Sie das folgende Beispiel:

// expre_Increment_and_Decrement_Operators2.cpp
#define max(a,b) ((a)<(b))?(b):(a)

int main()
{
   int i = 0, j = 0, k;
   k = max( ++i, j );
}

Das Makro wird wie folgt erweitert:

k = ((++i)<(j))?(j):(++i);

Wenn i größer oder gleich j oder um 1 kleiner als j ist, wird es zweimal inkrementiert.

Hinweis

C++-Inlinefunktionen sind in vielen Fällen Makros vorzuziehen, da diese Nebeneffekte, wie die hier beschriebenen, ausschließen und der Programmiersprache die weitere Ausführung vollständigerer Typüberprüfung ermöglichen.

Siehe auch

Ausdrücke mit unären Operatoren
Integrierte C++-Operatoren, Rangfolge und Assoziativität
Inkrementierungs- und Dekrementierungsoperatoren in Präfixnotation