Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Verständnisfrage zu kaskadierten Zuweisungsoperatoren

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 <
000
11.07.2006, 16:03 Uhr
Yadgar



High!

Zuweisungsoperatoren sind rechtsassoziativ... also müssten doch in diesem Programm hier:


C++:
int main()
{
   int i1, i2, i3;
  
   i1=i2=i3=0;
  
   i1+=3;
   i1*=2;
  
   (i2=i1) /= 3;
  
   cout << "i1 = " << i1 << ", i2 = " << i2 << ", i3 = " << i3 << endl;
  
   i3 = i1 /= 3;
  
   cout << "i1 = " << i1 << ", i2 = " << i2 << ", i3 = " << i3 << endl;
  
   getchar();
}



am Ende die drei Variablen die Werte 0, 2 und 0 haben!

Ich stellte es mir so vor:
i2 wird erst auf den Wert von i1 (6) gesetzt, anschließend werden beide durch 3 geteilt, haben also den Wert 2. In der zweiten Anweisung wird i1 noch einmal durch 3 geteilt, da es vom Typ int ist, wird es 0; dieser Wert wird dann auch i3 zugewiesen, so dass die drei Variablen am Ende die Werte 0, 2 und 0 haben.

Stattdessen haben aber am Ende alle Variablen den Wert 2! Wie kann das sein? Ist die Klammer in der fünften Anweisung (also (i2=i1) /= 3) wirkungslos?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.07.2006, 16:12 Uhr
ao

(Operator)



Zitat von Yadgar:
Ist die Klammer in der fünften Anweisung (also (i2=i1) /= 3) wirkungslos?

Ja. Es passiert in etwa folgendes:

C++:
// Preco: i1 ist 6, i2 ist 0.
int x; // Compiler erzeugt namenloses temporäres Objekt,
       // das wahrscheinlich restlos wegoptimiert wird
       // und das ich hier einfach mal x nenne.
x = (i2 = i1); // i2 ist 6, x ist auch 6
x /= 3; // x ist 2, i2 ist immer noch 6
// x verschwindet hiernach im Orkus.


ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: