Ouvi falar do termo "curto-circuito" usado em C, C ++, C #, Java e muitos outros. O que isso significa e em que cenário seria usado?
concepts
conditions
if-statement
fasil
fonte
fonte
&&
operador.||
também ... pelo menos deveria.||
e&&
para&
e|
para ver a diferença sutil. Tem um programa simples avaliar1 || printf("yay");
vs0 || printf("yay");
e1 | printf("yay");
vs0 | printf("yay");
para ver as differecesRespostas:
Curto-circuito em C é quando um operador lógico não avalia todos os seus argumentos.
Tomemos, por exemplo
&&
, e , é óbvio que0 && WhoCares
isso será falso, não importa o queWhoCares
seja. Por isso, C apenas pula a avaliaçãoWhoCares
. O mesmo vale1 || WhoCares
, sempre será verdade. Por isso, podemos escrever código comoDessa forma, evitamos fazer alguma operação potencialmente impossível. Se não podemos disparar os mísseis, certamente não queremos tentar. Isso é comumente usado com ponteiros, especialmente ponteiros de arquivo.
Isso ocorre de várias outras maneiras úteis para evitar computação desnecessária
Isso evita o trabalho extra se não for necessário.
fonte
CanFireMissiles && FireMissiles()
, pois me faz suspeitar que você está abusando de curto-circuito para provocar efeitos colaterais. Eu sinto que você está escondendo ações de forma condicional. Esse código é melhor escrito comoif(CanFireMissiles){FireMissiles();}
ouif(CanFireMissles){didFireMissiles = TryFireMissiles(); if(didFireMissiles){...}}
.IsInCache(value) || IsInDatabase(value)
, onde o IsInDatabase pode levar tempo (especialmente se o uso de um dispositivo móvel e a latência da rede for um problema)."Curto-circuito" normalmente se refere à " Avaliação de curto-circuito ", que é um conceito geral, não apenas específico de C.
Avaliação de operadores booleanos da esquerda para a direita; portanto, quaisquer termos que tornarão os outros termos desnecessários serão úteis. Portanto, você pode verificar uma condição que exclua outras condições posteriormente, permitindo uma avaliação parcial das operações lógicas, em vez de avaliar a coisa toda.
Exemplo:
Um exemplo mais complexo:
fonte
== 0
não é apenas desnecessário, pode realmente confundir algumas pessoas.A avaliação de curto-circuito pode levar a que algumas partes de uma condição não sejam avaliadas.
Por exemplo:
não irá exercer
f
.fonte