J'ai entendu parler du terme «court-circuit» utilisé en C, C ++, C #, Java et bien d'autres. Qu'est-ce que cela signifie et dans quel scénario serait-il utilisé?
14
J'ai entendu parler du terme «court-circuit» utilisé en C, C ++, C #, Java et bien d'autres. Qu'est-ce que cela signifie et dans quel scénario serait-il utilisé?
&&
opérateur.||
également ... du moins, il devrait l'être.||
et&&
pour&
et|
voir la différence subtile. Avoir un programme simple évaluer1 || printf("yay");
vs0 || printf("yay");
et1 | printf("yay");
vs0 | printf("yay");
pour voir les différencesRéponses:
Le court-circuitage en C est lorsqu'un opérateur logique n'évalue pas tous ses arguments.
Prenez par exemple et
&&
, il est assez évident que cela0 && WhoCares
va être faux, quoi qu'il enWhoCares
soit. Pour cette raison, C saute simplement l'évaluationWhoCares
. Il en va de même1 || WhoCares
, ce sera toujours vrai. Pour cette raison, nous pouvons écrire du code commeDe cette façon, nous évitons de faire une opération potentiellement impossible. Si nous ne pouvons pas tirer les missiles, nous ne voulons certainement pas essayer. Ceci est couramment utilisé avec les pointeurs, en particulier les pointeurs de fichiers.
Cela se joue de nombreuses autres façons utiles pour éviter les calculs inutiles
Cela évite de faire un travail supplémentaire si nous n'en avons pas besoin.
la source
CanFireMissiles && FireMissiles()
, car cela me fait penser que vous abusez des courts-circuits pour déclencher des effets secondaires. J'ai l'impression que vous cachez des actions au conditionnel. Un tel code est mieux écrit commeif(CanFireMissiles){FireMissiles();}
ouif(CanFireMissles){didFireMissiles = TryFireMissiles(); if(didFireMissiles){...}}
.IsInCache(value) || IsInDatabase(value)
, où IsInDatabase peut prendre du temps (surtout si l'utilisation d'un appareil mobile et la latence du réseau est un problème).«Court-circuitage» se réfère généralement à « Évaluation de court-circuit » qui est un concept général, pas seulement spécifique à C.
Évaluation des opérateurs booléens de gauche à droite, donc tous les termes qui rendront les autres termes inutiles sont utiles. Vous pouvez donc vérifier une condition qui exclut d'autres conditions plus tard, permettant ainsi une évaluation partielle des opérations logiques plutôt que d'évaluer le tout.
Exemple:
Un exemple plus complexe:
la source
== 0
n'est pas seulement inutile, cela pourrait en fait dérouter certaines personnes.L'évaluation d'un court circuit peut conduire à ce que certaines parties d'une condition ne soient pas évaluées.
Par exemple:
n'exécutera pas
f
.la source