Ho sentito parlare del termine "cortocircuito" usato in C, C ++, C #, Java e molti altri. Che cosa significa questo e in quale scenario verrebbe utilizzato?
Il cortocircuito in C è quando un operatore logico non valuta tutti i suoi argomenti.
Prendi ad esempio e &&
, è abbastanza ovvio che 0 && WhoCares
sarà falso indipendentemente da cosa sia WhoCares
. Per questo motivo, C salta semplicemente la valutazione di WhoCares
. Lo stesso vale per 1 || WhoCares
, sarà sempre vero. Per questo motivo, possiamo scrivere un codice come
CanFireMissiles && FireMissiles()
In questo modo evitiamo di fare qualche operazione potenzialmente impossibile. Se non possiamo licenziare i missili, non vogliamo assolutamente provarci. Questo è comunemente usato con i puntatori, in particolare i puntatori di file.
bool isN(int* ptr, int n){
return ptr && *ptr == n;
}
Questo si presenta in molti altri modi utili per evitare l'elaborazione non necessaria
isFileReady() || getFileReady()
Questo evita di fare lavori extra se non è necessario.
"Cortocircuito" di solito si riferisce a " Valutazione di cortocircuito " che è un concetto generale, non solo C specifica.
Valutazione degli operatori booleani da sinistra a destra, quindi tutti i termini che renderanno inutili gli altri termini sono utili. Quindi potresti verificare una condizione che esclude altre condizioni in un secondo momento, consentendo così una valutazione parziale delle operazioni logiche piuttosto che valutare l'intera cosa.
Esempio:
while((x && y) == 1) {
//This bit will not execute if x is 0 or y is 0 but y won't even be
//evaluated due to short circuit evaluation if x is 0.
}
Un esempio più complesso:
if((a || b || c || d || e || f || g || h || i || j || k) == 1) {
/* If any of these are equal to 1 the whole expression is equal to 1,
* thus doesn't it make sense to short circuit evaluate this?
* Saves a bunch of time.
*/
}
Una valutazione del corto circuito può portare a non valutare alcune parti di una condizione.
Ad esempio:
if (true || f()) { ... }
non mostrerà f
.
Leggi altre domande sui tag conditions concepts if-statement