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.