Auswertungsreihenfolge



  • Hallo,

    ich wollte wissen ob der C++ Standard vorschreibt in welcher Reihenfolge Ausdrücke in if- und for-Anweisungen ausgewertet werden müssen?

    Ich dachte da an folgendes:

    for (Element element = first; element->getNext() != NULL && element->getNext()->getValue() < value; element = element->getNext());
    

    oder

    if (element->getNext() != NULL && element->getNext->getKey() == value) ...
    

    Kann ich sicher sein, dass der Ausdruck zuerst links ausgewertet wird(also die Prüfung ob element->getNext() NULL ist) oder kann es passieren, dass ich eine Null Pointer Exception bekomme, da zuerst das rechte überprüft wurde?



  • bei && ist es sicher, solange kein scherzkeks den operator überladen hat.
    am bestenm du suchst nach "c++ sequence point"



  • btw gibts auch nen komma-operator:

    for (0; 1, 1; 0)
    {}
    

    bb

    @volkard: Warum sollte sich die Reihenfolge durch die Überladung ändern? Oo



  • unskilled schrieb:

    @volkard: Warum sollte sich die Reihenfolge durch die Überladung ändern? Oo

    weils dann nur ein schlichter funktionsaufruf ist. und bei foo(a,b) werden beide ausgewertet und es ist noch nichtmal sicher, ob a oder b zuerst kommt.



  • volkard schrieb:

    unskilled schrieb:

    @volkard: Warum sollte sich die Reihenfolge durch die Überladung ändern? Oo

    weils dann nur ein schlichter funktionsaufruf ist. und bei foo(a,b) werden beide ausgewertet und es ist noch nichtmal sicher, ob a oder b zuerst kommt.

    ok - ist logisch... mein fehler - danke ^^

    bb



  • danke auch 🙂



  • Bei dem logischen And-, Or- und dem Komma-Operator ist vom Standard garantiert, dass der linke Teil zuerst ausgewertet wird.


Anmelden zum Antworten