Es funktioniert garantiert: logische UND- und OR-Ausdrucksketten werden von links nach rechts ausgewertet, und wenn der erste Teilausdruck die Bedingung erfüllt, werden keine weiteren Teilausdrücke ausgewertet.
Wenn in Ihrem Fall currentNode
null ist, wird es durch den zweiten Teilausdruck niemals dereferenziert, daher ist der Code sicher.
Wie @jdv schon sagte, wird dies als Kurzschlussauswertung , nicht faule Auswertung bezeichnet. Bei letzterem handelt es sich um eine Programmiertechnik, bei der Sie für den Kunden den erforderlichen Wert nur beim ersten Mal berechnen, wenn er konkret benötigt wird. Ein einfaches Beispiel:
%Vor% Beachten Sie, dass dem Client von Example
das Implementierungsdetail nicht bekannt ist, dass theObject
träge ausgewertet wird. Sie können also zwischen der eifrigen und der faulen Evaluierung wechseln, ohne die öffentliche Schnittstelle der Klasse zu beeinflussen. p>
(Natürlich sollte im realen Produktionscode getTheObject
in einer separaten cpp-Datei implementiert werden, und es sollte wahrscheinlich Synchronisation, Fehlerbehandlungscode usw. enthalten. Dies ist nur ein einfaches Beispiel: -)
Ja, das ist sicher. Dies wird als boolesche Kurzschlussauswertung bezeichnet.
Für Vollständigkeit ist zu erwähnen, dass es prinzipiell möglich ist, das || zu übersteuern und & amp; & amp; Betreiber. Wenn Sie dies tun, wird dies die Kurzschlussauswertung unterbrechen und wird daher nicht empfohlen.
Tags und Links c++ lazy-evaluation