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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top