Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » preinkrement + for-schleife...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
09.05.2006, 16:53 Uhr
~coutcin
Gast


hallo zusammen,
hab im net gesucht, aber nirgends klärung
gefunden. bedeutet ein preinkrement im
schrittweiten-ausdruck der for-schleife, dass vor der
anweisung inkrementiert wird - im gegensatz zu post-
inkrement? danke.
mfg coutcin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.05.2006, 16:59 Uhr
Tommix



Hallo,
nein. Ob Pre oder Post ist nur von Belang, wenn der Ausdruck hinterher ausgewertet wird. In for-Schleifen wird zumeist nur der Seiteneffekt, also die Änderung einer Variable ausgenutzt. Also

C++:
i++;
++i;


ist Wurscht, wogegen

C++:
a = ++i;
b = i++;


verschiedene Wirkung haben.
Preinkrement kann in C++ unter Umständen bei der Performance besser sein.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.05.2006, 17:03 Uhr
Spacelord
Hoffnungsloser Fall


Das macht überhaupt keinen Unterschied.
Beides wird nach der Ausführung der Anweisung ausgeführt(wobei ++i minimal schneller ist als i++ weil keine temporäre Variable angelegt wird).



Bearbeitung:
Jaja,der frühe Vogel fängt den Wurm...


Gruss Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.

Dieser Post wurde am 09.05.2006 um 17:03 Uhr von Spacelord editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.05.2006, 23:28 Uhr
Pler
Einer von Vielen
(Operator)



Zitat von Spacelord:

Das macht überhaupt keinen Unterschied.


Du hättest in deiner Bearbeitung noch erwähnen sollen, dass sich dein Post nicht auf den von Tommix bezieht.
Wenn man das jetzt liest könnte man denken, dass es bei seinen Beispielen auch "keinen Unterschied" macht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.05.2006, 23:31 Uhr
Spacelord
Hoffnungsloser Fall


Jo,stimmt.So könnte man es auffassen.
Also....das bezieht sich nicht auf Tommix seinen Post!
Ich war nur zu laaaaangsaaaam
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.05.2006, 00:38 Uhr
Hans
Library Walker
(Operator)


@Pler: ich hab die jetzt gerade alle hintereinander gelesen, hab aber gleich gemerkt, das sich der Beitrag von Spacelord auf die ursprüngliche Frage bezieht.
Was mich da vielmehr interessieren würde, ist die Sache mit der temporären Variablen, die bei i++ erzeugt wird. Wozu soll die gut sein, bzw. wozu legt der Compiler die an, wenn i++ da steht, aber bei ++i nicht? - Ich hab nämlich mal gelesen, das im Assembler beides als

Code:
inc i;


auftaucht.
Ach ja, und beim Assembler der PDP-11, auf der die Sprache C ja mal entwickelt wurde, gab es im übertragenen Sinn entweder i++ oder --i, aber nicht ++i oder i--. Das hat der Herr Ritchie erst bei C verallgemeinert. (/Geschichtsstunde )

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 10.05.2006 um 00:45 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.05.2006, 00:39 Uhr
Pler
Einer von Vielen
(Operator)


@Hans:
Na super, wenn du weißt was gemeint ist kannst du das sicher nachvollziehen. Aber der Fragesteller sicherlich nicht.
Spacy hat's eingesehen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.05.2006, 00:55 Uhr
Hans
Library Walker
(Operator)


@Pler: Okay, da könntest Du recht haben. Aber ich finde dennoch, das Tommix es treffend erklärt hat. Richtig wichtig wird das ja erst bei solchen Konstruktionen:

C++:
#include <stdio.h>

int main()
{
  int i, A[10];

  for (i=0; i<10; A[i++]=0)
       ;

  for (i=0; i<10; printf ("%d.\n", (A[i++]+1) * 2 + i))
       ;

  return 0;
}


Wobei ich natürlich auch weis, dass das kein guter Stil ist, und extrem Fehleranfällig.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 10.05.2006 um 01:00 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
10.05.2006, 01:14 Uhr
Helmut



Hallo!

Kenn mich in Assembler aus. In C/C++ wird das mit den temporären
Variablen beim Postfix-Operator oft an falscher Stelle erwähnt,
denn wenn es um grundlegegende Typen wie int usw. geht, ist dies
einfach falsch.
Es gilt eben für Objekte.
Objekte (z.B. Iteratoren) sind immer bevorzugt mit Präfix-Operatoren
aufzurufen, da diese schneller sind, weil sie nicht mit einem
temporären Objekt arbeiten müssen.
Beispiel:

C++:
MyClass& MyClass::operator++() //-> Präfix (++Obj)
{
   ++m_nID;
   return *this; //Rückgabe einer Referenz auf *this
}
const MyClass MyClass::operator++(int) //-> Postfix (Obj++)
{
   MyClass Obj(m_nID); //temporäres Objekt
   ++(*this);
   return Obj; //Rückgabe eines Objektes per Wert
}




MfG Helmut
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
10.05.2006, 10:38 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von Hans:


C++:
....
  for (i=0; i<10; printf ("%d.\n", (A[i++]+1) * 2 + i))
       ;
....


Wobei ich natürlich auch weis, dass das kein guter Stil ist, und extrem Fehleranfällig.

Hans


Genau.

C++:
(A[i++]+1) * 2 + i


Undefined behaviour
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: