Auswertungsreihenfolge
-
Hab eine Frage zur folgenden Testangabe:
#include <iostream>
using namespace std;
int main()
{
double a=8, b=9, c=7;cout << (b=(a=b+0.5)+(c=b));
cout << a/2 << b/2 << c/2;
}// 18.54.759.254.5 sollte die Ausgabe sein.
Aber woher weiss der Compiler welcher der Summanden zuerst ausgewertet wird b=(a=b+0.5) oder (c=b)? Sollte die Auswertungsreihenfolge hier nicht undefiniert sein?
Danke für Eure Hilfe!
-
C++ im C-Unterforum - check.
Keine Code-Tags - check.Und zu deiner Frage: du hast deinen eigenen Code nicht gelesen. Die beiden Ausdrücke sind nicht
b=(a=b+0.5)
und(c=b)
, sonderna=b+0.5
undc=b
- und die haben von einander überhaupt keine Abhängigkeiten. Und erst nachdem diese Ausdrücke abgearbeitet sind wirdb
irgendwas zugewiesen.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (alle ISO-Standards) in das Forum C++ (alle ISO-Standards) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
du musst hierfür nur zwei Dinge wissen, dann kannst du die Aufgabe lösen:
1. Die Klammerausdrücke werden zuerst ausgewertet, ganz wie du es aus der Mathematik kennst. (x+(y+z)) --> y+z wird zuerst ausgewertet, dann x+(...)
2. Das Ergebnis einer Zuweisung ist der zugewiesene Wert, d.h. der Ausdruck x=5 hat den Wert 5.