Importer:Error:WasEmpty
-
ist die ausführreihenfolge bei einem while-kopf in etwa dem stil definiert?
while(++iter != vector.end() && *iter != 0) { // ... }also kann man garantiert davon ausgehen dass immer zuerst iter inkrementiert wird, dann auf ungleichheit zu end() getestet wird und er erst dann dereferenziert wird?
-
für das
whilenicht, aber für das&&. Es ist garantiert, dass der erste Ausdruck vor dem&& zuerst ausgewertet wird und der zweite dann nur, wenn der erste zu [c]truewird.[/c]
Das Verhalten dieser Code-Zeile ist aber nicht definiert, wennitervorher schon==vector.end()war!
-
while oder sonstwas hat damit nichts zu tun, die Regeln für die Auswertungsreihenfolge eines Ausdrucks sind überall gleich (was nicht bedeutet, dass alles festgelegt wäre, vieles ist bewusst ungeregelt - aber überall gleich ungeregelt). Hier ist der Ausdruck:
++iter != vector.end() && *iter != 0Relevante Regeln:
http://en.wikipedia.org/wiki/C_operator_precedence#Operator_precedence
und
http://en.wikipedia.org/wiki/Short-circuit_evaluation
Kannst du damit deine Fragen selbst beantworten?
-
ja das beantwortet es ziemlich gut.
danke und gruss