Inkrementieren und Dekrementieren in C++ (Inkrementieren und Dekrementieren in C++), Lektion, Seite 721550
https://www.purl.org/stefan_ram/pub/c++_inkrementieren_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram

Inkrementieren und Dekrementieren in C++

Vorinkrementierung

Die Addition des Wertes "1" zu einem ganzzahligen Wertspeicher wird auch als Inkrementierung  dieses Wertspeichers bezeichnet.

Die Inkrementierung eines Objektes "i" würde man mit dem Wirkausdruck "i += 1" schreiben. In C++  gibt es dafür auch einen speziellen Operator, mit dem man dasselbe als "++i" schreiben kann. Entsprechend dient "--i" der Dekrementierung  des Objektes "i", also der Verminderung des Wertes um den Wert "1".

Auch für die Inkrementierung und Dekrementierung gilt, daß Wirkungen sicher erst nach dem nächsten Sequenzpunkt eingetreten sind. Daher ist der Wert der Argumente von "f( ++i, ++i )" nicht definiert, denn die Reihenfolge der Inkrementierungen ist unbestimmt. Wenn das Objekt "i" den Wert "0" hat, dann könnte die Funktion "f" also wie in dem Aufruf "f( 1, 2 )" oder wie in dem Aufruf "f( 2, 1 )" aufgerufen werden.

Auch die Wirkung des Ausdruck "x = ++x" ist nicht definiert, weil nicht definiert ist, ob die Wirkung der Inkrementierung vor oder nach der Wirkung der Zuweisung eintritt.

Übungsfrage Was ist der Wert des Ausdrucks "++i", wenn das Objekt "i" zuvor den Wert "0" hat? (Man bedenke, daß der Ausdruck "++i" für "i += 1" steht und dies soviel wie "i = i + 1" bedeutet.)

vereinfachte Syntax
Ausdruck
.--. .----------.
--->( ++ )-->| Ausdruck |--->
'--' '----------'
vereinfachte Syntax
Ausdruck
.--. .----------.
--->( -- )--->| Ausdruck |--->
'--' '----------'
precrement.cpp
#include <iostream> 
#include <ostream>
int main() 
{ int i( 0 );  
std::cout << ++i << '\n'; 
std::cout << i << '\n'; 
std::cout << --i << '\n'; 
std::cout << i << '\n'; }

std::cout



0

Nachinkrementierung und Nachdekrementierung

Es kann sein, daß durch einen Ausdruck der Wert eines Objektes vor  der Inkrementierung notiert werden soll. In diesem Fall wird der Operator dem Objektausdruck nachgestellt. Die Bezeichnungen „Nachinkrementierung“ und „Nachdekrementierung“ ergeben sich daraus, daß die Inkrementierung bzw. Dekrementierung in diesem Fall sozusagen „nach“ der Bewertung des Ausdrucks erfolgt. Der Wert einer Nachinkrementierung oder Nachdekrementierung ist also der Wert des inkrementierten bzw. dekrementierten Objektes vor  der Inkrementierung bzw. Dekrementierung.

Übungsfrage Was ist demnach der Wert des Ausdrucks "i++", wenn das Objekt "i" zuvor den Wert "0" hat?

Die Nachinkrementierung oder Nachdekrementierung ist im allgemeinen aufwendiger (hinsichtlich der Laufzeit) als die Vorinkrementierung bzw. Vordekrementierung. Daher sollte sie nicht ohne Not eingesetzt werden. Daraus ergibt sich folgende Regel.

Wenn der Wert eines Ausdrucks ohnehin nicht verwendet wird, soll die Vordekrementierung oder Vorinkrementierung (anstatt der Nachdekrementierung bzw. Nachinkrementierung) bevorzugt werden.

Will man also eine Anweisung schreiben, die ein Objekt "i" inkrementiert, dann ist dafür die Vorinkrementierung, wie in der Anweisung "++i;", zu empfehlen, obwohl die Nachinkrementierung, wie in der Anweisung "i++;", dieselbe Wirkung hätte. Insofern ist der Name der Programmiersprache C++  nicht vorbildlich.

vereinfachte Syntax
Ausdruck
.----------. .--.
--->| Ausdruck |--->( ++ )--->
'----------' '--'
vereinfachte Syntax
Ausdruck
.----------. .--.
--->| Ausdruck |--->( -- )--->
'----------' '--'
postcrement.cpp
#include <iostream> 
#include <ostream>
int main() 
{ int i( 0 );  
std::cout << i++ << '\n'; 
std::cout << i << '\n'; 
std::cout << i-- << '\n'; 
std::cout << i << '\n'; }

std::cout



0

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram721550 stefan_ram:721550 Inkrementieren und Dekrementieren in C++ Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd721550, slrprddef721550, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/c++_inkrementieren_de