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) , sondern a=b+0.5 und c=b - und die haben von einander überhaupt keine Abhängigkeiten. Und erst nachdem diese Ausdrücke abgearbeitet sind wird b 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.


Log in to reply