3.7.8. El operador ternario

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.