PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Inkrement und Dekrement


Newbi
2005-02-08, 08:54:20
Ich hätte da eine Frage zu den Präinkrementen und Postinkrementen, irgendwie verstehe ich nicht wie ich diese wirklich nütze bzw. wie ich diese verstehen soll.

Habe schon in 2 C++ Büchern nachgelesen und komme immer noch nicht raus. Kann einer der Gurus in Deutscher Sprache bitte aufschreiben wie man diese richtig nützt?

THX!

Aqualon
2005-02-08, 09:23:58
Kurz gesagt bedeutet prä erst den Wert verändern, dann verwenden und post erst den Wert verwenden und dann verändern. Dies spielt bei Zuweisungen eine Rolle:

i=3;
a = i++;
b = ++i;

Das a bekommt den Wert 3 zugewiesen, da i erst nach der Zuweisung hochgezählt wird. Die Variable b dagegen bekommt den Wert 5 zugewiesen, da i bereits vor der Zuweisung an b erhöht wird.

Beim Dekrement läuft das ganz genauso.

Aqua

Edit: Beispiel mit der Schleife entfernt, da post und prä dort keinerlei Rolle spielen.

micki
2005-02-08, 09:53:22
Bei einer präinkrement-Schleife wird das i schon um eins hochgezählt, bevor in die Schleife gegangen wird. Diese i innerhalb diese Schleife läuft also von 1 bis 9.
for(int i = 0; i < 10; ++i) {}


sorry, aber das ist falsch, es wird immer noch von 0 bis 9 iteriert.

MfG
micki

del_4901
2005-02-08, 12:09:27
mit

for(int i = 0; ++i < 10;)

sollte es gehen wie Aqua meinte.

Trap
2005-02-08, 12:46:19
++a macht:
{ a=a+1;
return a;}

a++ macht:
{ t=a;
a=a+1;
return t;}

Beides Pseudocode...

RoKo
2005-02-08, 14:41:33
Trap hat es schon gut erklärt, aber um es noch etwas genauer auszuführen:
In C bzw. C++ hat praktisch jeder Ausrduck einen Wert. (a + 1) hat den Wert a + 1. Soweit klar, aber selbst der Ausdruck (a = b) hat einen Wert (b übrigens), wodurch man dann Sachen ala a = b = c schreiben kann.
a++ und ++a erhöhen beide a um eins. a++ hat aber den Wert a, ++a hat den Wert a + 1. Macht also nur einen Unterschied, wenn der Ausdruck weiterverwendet wird, zum Beispiel in einer Zuweisung. Da in Aqualons erstem Beispiel a++ bzw. ++a als einzelne Anweisung steht, macht es dort keinen Unterschied.

Aqualon
2005-02-08, 14:43:44
sorry, aber das ist falsch, es wird immer noch von 0 bis 9 iteriert.
Stimmt, da hast du Recht. Das mit der Schleife ist ein saublödes Beispiel.

Aqua

tam tam
2005-02-10, 16:39:22
falls nochmal jemand hier vorbeischaut...

ich las noch, daß mit den vorgesetzten ++ vor der variable das programm ein bissel fixer sein soll?

und ob vorne oder hinten, darauf wurde nicht genau eingegangen, naja, viell. kommt es noch....

übrigens find ich delphi besser als c++(wegen der übersicht), naja, werd mich ja wohl daran gewöhnen müssen...

php ist doch 'ne interpretersprache, ist jedoch nicht ganz unähnlich zu c++?
(seit anfang dieser woch mit php und sql konfrontiert)

RoKo
2005-02-10, 17:04:02
Ja, ++a ist potentiell schneller als a++. An Traps Beispiel siehst Du auch ganz klar warum, für a++ muß eine zusätzliche, temporäre Variable eingeführt werden. Bei den eingebauten Datentypen wird das nicht viel ausmachen und wenn keine Zuweisung ausgeführt wird, wird der Compiler das wohl wegoptimieren. Anders bei eigenen Datentypen mit überladenen ++Operatoren, da kann das kritisch werden.

PHP ist eine Art Mix aus C, Java und Perl.