gute Praxis in C ++ (Lazy Evaluation)

7

Ich habe eine Frage über die faule Bewertung von C ++, kann ich sicher sein, dass dieser Code-Schnipsel immer funktioniert oder eine schlechte Idee ist? wenn ja, warum? Vielen Dank im Voraus

  

if (aktueller Knoten == 0 || * aktueller Knoten ==   Element){        Rückkehr; }

    
rookie 06.01.2011, 09:41
quelle

3 Antworten

19

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: -)

    
Péter Török 06.01.2011, 09:44
quelle
11

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.

    
user180326 06.01.2011 09:44
quelle
3

Für die Lazy-Evaluierung in einer Multithread-Umgebung sollten Sie boost :: once in Erwägung ziehen, um das einmalige Laden durchzuführen.

%Vor%     
CashCow 06.01.2011 10:38
quelle

Tags und Links