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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top