Ich habe von dem Begriff "Kurzschließen" gehört, der in C, C ++, C #, Java und vielen anderen verwendet wird. Was bedeutet das und in welchem Szenario würde es verwendet?
concepts
conditions
if-statement
fasil
quelle
quelle
&&
Betreibers.||
auch ... zumindest sollte es so sein.||
und&&
zu&
und|
um den subtilen Unterschied zu sehen. Lassen Sie ein einfaches Programm1 || printf("yay");
vs0 || printf("yay");
und1 | printf("yay");
vs auswerten0 | printf("yay");
, um die Unterschiede zu sehenAntworten:
Ein Kurzschluss in C liegt vor, wenn ein logischer Operator nicht alle seine Argumente bewertet.
Nehmen wir zum Beispiel und
&&
, es ist ziemlich offensichtlich, dass0 && WhoCares
es falsch sein wird, egal wasWhoCares
ist. Aus diesem Grund überspringt C nur die AuswertungWhoCares
. Gleiches gilt1 || WhoCares
, es wird immer wahr sein. Aus diesem Grund können wir Code wie schreibenAuf diese Weise vermeiden wir potenziell unmögliche Operationen. Wenn wir die Raketen nicht abfeuern können, wollen wir es auf keinen Fall versuchen. Dies wird häufig bei Zeigern verwendet, insbesondere bei Dateizeigern.
Dies kann auf viele andere nützliche Arten geschehen, um unnötiges Rechnen zu vermeiden
Dies vermeidet zusätzliche Arbeit, wenn dies nicht erforderlich ist.
quelle
CanFireMissiles && FireMissiles()
, da ich den Verdacht habe, dass Sie einen Kurzschluss missbrauchen, um Nebenwirkungen auszulösen. Ich habe das Gefühl, Sie verstecken Aktionen unter bestimmten Bedingungen. Solcher Code ist besser alsif(CanFireMissiles){FireMissiles();}
oder geschriebenif(CanFireMissles){didFireMissiles = TryFireMissiles(); if(didFireMissiles){...}}
.IsInCache(value) || IsInDatabase(value)
, bei denen IsInDatabase möglicherweise einige Zeit in Anspruch nimmt (insbesondere, wenn die Verwendung eines Mobilgeräts und die Netzwerklatenz ein Problem darstellen)."Kurzschluss" bezieht sich typischerweise auf " Kurzschlussbewertung ", die ein allgemeines Konzept ist, nicht nur C-spezifisch.
Die Auswertung der Booleschen Operatoren erfolgt von links nach rechts. Daher sind alle Begriffe nützlich, die die anderen Begriffe überflüssig machen. Sie können also später nach einer Bedingung suchen, die andere Bedingungen ausschließt, und so eine teilweise Bewertung der logischen Operationen zulassen, anstatt das Ganze zu bewerten.
Beispiel:
Ein komplexeres Beispiel:
quelle
== 0
ist nicht nur unnötig, es könnte tatsächlich einige Leute verwirren.Die Kurzschlussbewertung kann dazu führen, dass einige Teile eines Zustands nicht bewertet werden.
Beispielsweise:
wird nicht ausgeführt
f
.quelle