logisches und, Auswertung von links nach rechts
-
Hallo,
kann man sich darauf verlassen, dass bei einer Verknüpfung mit "logischem und" immer der erste Ausdruck zuerst ausgewertet wird.
Und ist es in Ordnung, etwas derartiges zu schreiben oder sollte man das besser unterlassen?
while (i < myVec.size() && myVec[i] < 15)
-
Es ist nicht nur garantiert, dass der erste Ausdruck zuerst ausgewertet wird, sondern auch, dass der zweite nicht ausgewertet wird, wenn der erste bereits false war. Daher ist dein Code ok.
Man kann auch lustige ifs ohne ifs damit bauen:#include <cstdio> int main() { false && std::printf("Wird nicht ausgegeben!\n"); true && std::printf("Wird ausgegeben!\n"); }
-
Ok ist es schon, ich umklammere nur immer die einzelnen Ausdrücke, um das ganze übersichtlicher zu gestalten und um für Eindeutigkeit zu sorgen.
Bei dir also:
while ((i < myVec.size()) && (myVec[i] < 15))
-
Die erinnerung schrieb:
ich umklammere nur immer die einzelnen Ausdrücke [...] um für Eindeutigkeit zu sorgen
Wobei das natürlich ein ähnlich gelagerter Fall ist wie meine eigentliche Frage:
dass ich auf die Klammern verzichten kann, garantiert mir doch die Operatorpriorität genauso wie garantiert ist (eben gelernt), dass in meinem Beispiel der zweite Ausdruck nicht ausgewertet wird, sofern der erste bereits false liefert.Trotzdem vielen Dank für die Antworten!