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 <
010
10.05.2006, 12:23 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Undefined behaviour


Macht das Programm also irgendwie menschlicher
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
10.05.2006, 12:50 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


hehe lol
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
11.05.2006, 03:07 Uhr
Hans
Library Walker
(Operator)



Zitat von virtual:
[quote Hans]
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[/quote]

Ah ja, gut zu wissen, das ein neuer Compiler das sagt. Mein alter Borland-compiler hat es ohne zu knurren übersetzt, und liefert folgendes:

Code:
D:\Borland\work>strange3
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.

D:\Borland\work>


Es wäre noch anzumerken, das ich mir das Beispiel mehr oder weniger schnell "aus den Fingern gezogen" habe. In einer früheren Fassung stand da noch:

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


oder so ähnlich. Jedenfalls führte das zu einer Endlos-schleife...

Ach ja, @virtual: Du bist doch hier einer der besten C++ Experten. Vielleicht kannst Du noch mal erklären, was es mit der temporären Variablen bei i++ auf sich hat, die man bei ++i nicht benötigt. Das Beispiel von Helmut auf der vorherigen Seite sagt mir nämlich nicht viel. Und ob das schon die vollständige Erklärung ist, wage ist zu bezweifeln.

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

Dieser Post wurde am 11.05.2006 um 03:15 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
11.05.2006, 08:50 Uhr
stephanw
localhorst


@Hans:

Das spielt eigentlich erst bei höheren Datentypen (Iteratoren o.ä.) eine Rolle, wo der Aufwand zum Kopieren nicht trivial ist.

Gegeben sei i :
++i (Pre-Inkrement): Der Wert des Ausdrucks soll i+1 sein und nach dem Auswerten soll i den Wert i+1 haben. Also kann man i direkt erhöhen und dann auswerten.
i++ (Post-Inkrement): Der Wert des Ausdrucks soll i sein, aber dennoch soll i nach dem Auswerten des Ausdrucks den Wert i+1 haben. Der Comp. kann i also nicht sofort erhöhen. Stattdessen müsste eine Kopie angelegt werden mit dem Zustand von i vor der Inkrementierung. Dann kann i inkrementiert werden. Ausgewertet wird dann die Kopie Genau das schlägt sich dann in dem entsprechenden Operator++ wieder: Kopie von sich selbst anlegen. Dann inkrementieren. Dann die Kopie zurückgeben.
--
Reden ist Schweigen und Silber ist Gold.

Dieser Post wurde am 11.05.2006 um 08:51 Uhr von stephanw editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
11.05.2006, 10:25 Uhr
virtual
Sexiest Bit alive
(Operator)


Steht übrigens alles in der FAQ.
--
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: