Qualcuno può spiegare questo esempio di corto circuito dell'operatore di virgole C ++?
-
28-10-2019 - |
Domanda
Qualcuno può spiegare questo esempio di corto circuito dell'operatore di virgole C ++?
bIsTRUE = true, false, true;
bIsFALSE = (true, false), true;
bIsAlsoTRUE = ((true, false), true);
Perché il corto circuito della seconda versione e il ritorno falso (almeno in msvc ++) e le altre due versioni non restituiscono ma ritornano VERO?
Soluzione
L'operatore di virgole ha una precedenza inferiore rispetto all'assegnazione, quindi questi sono analizzati come
(bIsTRUE = true), false, true;
(bIsFALSE = (true, false)), true;
(bIsAlsoTRUE = ((true, false), true));
L'operatore di virgola non si corto di corto circuito. Valuta l'operando sinistro, ignora il risultato, quindi valuta l'operando destro.
bIsTRUE
è true
Perché l'operando giusto dell'incarico è true
.
bIsFALSE
è false
perché (true, false)
valuta true
, ignora il risultato, quindi valuta e rese false
.
bIsAlsoTRUE
è true
perché ((true, false), true)
valuta (true, false)
, ignora il risultato, quindi valuta e rese true
.