El if-else ternario es inusual porque tiene tres
operandos. Realmente es un operador porque produce un valor, al
contrario de la sentencia ordinaria if-else. Consta de
tres expresiones: si la primera expresión (seguida de un
?) se evalúa como cierto, se devuelve el
resultado de evaluar la expresión que sigue al
?. Si la primera expresión es falsa, se
ejecuta la tercera expresión (que sigue a :)
y su resultado se convierte en el valor producido por
el operador.
El operador condicional se puede usar por sus efectos colaterales o por el valor que produce. A continuación, un fragmento de código que demuestra ambas cosas:
a = --b ? b : (b = -99);
Aquí, el condicional produce el rvalue. A
a se le asigna el valor de
b si el resultado de decrementar
b es diferente de cero. Si
b se queda a cero, a y
b son ambas asignadas a
-99. b siempre se decrementa, pero se asigna
a -99 sólo si el decremento provoca que b
valga 0. Se puede utilizar un sentencia similar sin el a
= sólo por sus efectos colaterales:
--b ? b : (b = -99);
Aquí la segunda b es superflua, ya que no se
utiliza el valor producido por el operador. Se requiere una
expresión entre el ? y
:. En este caso, la expresión puede ser
simplemente una constante, lo que haría que el código se ejecute
un poco más rápido.