Angenommen, ich habe zwei Ausdrücke links / rechts von ||
operator. Ich finde, wenn der linke Ausdruck wahr ist, wird der richtige Operator niemals aufgerufen werden. Zum Beispiel, in meinem unteren Code, wenn getRand
wahr zurückgibt, fand ich Foo
wird nie aufgerufen. Ich habe XCode auf Mac OSX getestet und mich gefragt, ob es sich um ein zuverlässiges Feature von C ++ handelt, auf das wir uns verlassen könnten - wenn der linke Teil von || ist wahr, wird der rechte Teil nie aufgerufen, oder ist es ein spezielles Feature nur für bestimmte Plattformen (z. B. OSX mit XCode)? Poste meinen Code unten, danke.
danke im voraus, Lin
Ja, es ist eine garantierte Funktion namens Kurzschlussauswertung .
Ebenso wird ein Ausdruck false && expression
niemals den richtigen Ausdruck auswerten.
frage mich, ob es sich um ein zuverlässiges Feature von C ++ handelt, auf das wir uns verlassen könnten - wenn der linke Teil von || ist wahr, der rechte Teil wird nie aufgerufen?
Ja, für den eingebauten Operator.
Vom Standard $ 5,15 / 1 logischer ODER-Operator [expr.log.or] (fett von mir)
Die || Operatorgruppen von links nach rechts. Die Operanden sind beides kontextuell in bool umgewandelt (Abschnitt 4). Es gibt auch wahr zurück seiner Operanden ist wahr und ansonsten falsch. Im Gegensatz zu |, || Garantien Links-nach-rechts-Bewertung; Außerdem ist der zweite Operand nicht ausgewertet, wenn der erste Operand true ergibt .
Beachten Sie, dass die Überladung von operator||
diese spezielle Eigenschaft verliert.
Logische Operatoren (fett von mir)
Eingebaute Operatoren & amp; & amp; und || Kurzschlussauswertung durchführen (nicht werte den zweiten Operanden aus, wenn das Ergebnis nach der Auswertung bekannt ist der erste), aber überladene Operatoren verhalten sich wie normale Funktion ruft und evaluiert immer beide Operanden .
Tags und Links c++