Inkrementoperator ++
-
Hallo,
ich steige gerade auf C++ um (von einem Basic-Dialekt), und arbeite gerade das Buch von Ulrich Breymann durch.Und da werden Sachen erklaert, die fuer mich etwas verwirrend sind...
z.B. verstehe ich den Inkrementoperator nicht.for(int i=0; i<100; i++) cout << i << endl;fuehrt bei mir zum selben Ergebnis wie
for(int i=0; i<100; ++i) cout << i << endl;Wieso?
Gruss,
Cartman
-
-
Lies dir mal den Beitrag von drakon durch, da wirds erklärt
http://www.c-plusplus.net/forum/viewtopic-var-t-is-229165-and-highlight-is-prefix.html
-
Hallo,
Wenn der Inkrementoperator alleine steht wie z.B in einer for-Schleife ist ++i und i++ exakt das gleiche..
Aber in einer zuweißung gibt es da einen kleinen Unterschied,
Wenn du schreibst:
int var = i++;
wir var zuerst i zugewießen und dann i um 1 erhöht. ( var erhält also den wert von i)
int var = ++i;
Hier wird i um 1 erhöht und dann var zugewießen.
-
Also ich glaube ich verstehs jetzt allmaehlich...
das "i++" entfaltet seine Wirkung in jedem Falle erst NACH dem ersten Schleifendurchgang...
Aber ich haette jetzt da doch noch eine Frage...
Wenn ich z.B. einen Vergleich mache
if(a==++i)wird i jetzt inkrementiert oder nur ueberpruft ob a um eins groesser ist als i und i NICHT inkrementiert?
Und wie siehts umgekehrt aus? (if(a==i++)) Wird da ueberprueft, ob a gleich i ist und i danach um 1 inkrementiert oder wie oben?
-
Eric Cartman schrieb:
Wenn ich z.B. einen Vergleich mache
if(a==++i)wird i jetzt inkrementiert oder nur ueberpruft ob a um eins groesser ist als i und i NICHT inkrementiert?
Der Inkrementoperator inkrementiert. Sprich i ist um eins größer. Unabhängig ob du die Prekrement- (++i) oder Postkrementvariante (i++) wählst.
und:
int i = 1 if(a==++i)... // Vergleich gegen 2, i=2 i = 1 if(a==i++)... // Vergleich gegen 1, i=2cu André
-
int x = 5; int y; // 1. Variante y = ++x; // y ist jetzt 6, denn x wird um 1 erhöht und dann wird der Inhalt von x dem y zugewiesen, x ist auch 6 // 2. Variante int x = 5; int y; y = x++; // y ist jetzt 5, x ist 6 //x wird um 1 erhöht aber der alte Wert von x wird dem y zugewiesen //Beim Vergleich if(a==++i) i wird zuerst um 1 erhöht, dieser Wert wird dann mit a verglichen (==) if(a==i++) i wird zuerst um 1 erhöht, aber der vorherige Wert wird mit a verglichen (==)
-
wert& wert::operator++() { *this = *this + 1; return *this; } wert wert::operator++(int) { wert oldwert =*this; // alten Stand sichern *this = *this + 1; // Variable erhöhen return oldwert; // aber return alten Stand }
-
@ Softwaremaker
Wie wäre es, wenn du ebenfalls Tags benutzen würdest?
-
Habs jetzt verstanden, danke fuer eure Hilfe!Tatsaechlich wuerde nur folgende Anweisung i unveraenderlich lassen:
if(a==i+1)Ich versteh jetzt nur den Sinn des Inkrementieroperators nicht... vielleicht ist das auch vorerst gar nicht wichtig.
Und jetzt versteh ich nicht, fuer was "size_t" eigentlich gut ist. Im Buch steht er sei ein "vorzeichenloser Zahlenttyp fuer das Ergebnis von sizeof()" oder sowas. Kann man da nicht einfach unsigned nehmen?

Gruss,
Cartmanedit: Tippfehler ausgebessert

-
++ als Abkürzung und um komplexe Ausdrücke zu ermöglichen. Zu faul für ein Beispiel jetzt. Überleg halt mal.
size_t is bei mir unsigned int... vergiss size_t
-
Google Fan schrieb:
++ als Abkürzung und um komplexe Ausdrücke zu ermöglichen. Zu faul für ein Beispiel jetzt. Überleg halt mal.
size_t is bei mir unsigned int... vergiss size_t
Ganz schoen verwirrend
Danke fuer deine Antwort 
Gruss,
Cartman
-
Der Inkrementoperator ist als das Erhöhen um eine Position definiert, und auch bei den Iteratoren in Verwendung. Und die Addieren nicht 1.
Es ist halt eine, unter anderem in C++, gebräuchliche Kurzschreibweise (Sei es nun für for-Schleifen, oder das durchiterieren von Containern).
Google Fan schrieb:
size_t is bei mir unsigned int... vergiss size_t
Schlechter Ansatz, sehr schlechter Ansatz. size_t kann anders als unsigned int definiert sein, daher würde ich solche unqualifizierten Aussagen lassen.
-
Eric Cartman schrieb:
das "i++" entfaltet seine Wirkung in jedem Falle erst NACH dem ersten Schleifendurchgang...
Sowie alle Aktualisierungsanweisungen im Schleifenkopf erst nach dem ersten Durchgang ausgeführt werden. Das liegt nicht am
i++, dasselbe gilt beispielsweise für++i.