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.