¿Alguien puede explicar este ejemplo de cortocircuito del operador de comas C ++?
-
28-10-2019 - |
Pregunta
¿Alguien puede explicar este ejemplo de cortocircuito del operador de comas C ++?
bIsTRUE = true, false, true;
bIsFALSE = (true, false), true;
bIsAlsoTRUE = ((true, false), true);
¿Por qué la segunda versión corta cortocircuito y regresa? falso (al menos en MSVC ++) y las otras dos versiones no lo hacen. verdadero?
Solución
El operador de coma tiene menor precedencia que la asignación, por lo que estos se analizan como
(bIsTRUE = true), false, true;
(bIsFALSE = (true, false)), true;
(bIsAlsoTRUE = ((true, false), true));
El operador de coma no corta cortocircuito. Evalúa su operando izquierdo, ignora el resultado y luego evalúa su operando derecho.
bIsTRUE
es true
Porque el operando correcto de la tarea es true
.
bIsFALSE
es false
porque (true, false)
evaluar true
, ignora el resultado, luego evalúa y produce false
.
bIsAlsoTRUE
es true
porque ((true, false), true)
evaluar (true, false)
, ignora el resultado, luego evalúa y produce true
.