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 cierta, 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 laterales 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 valor derecho. 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 a y a b se les asigna -99. b siempre se decrementa, pero se asigna a -99 sólo si el decremento provoca que b valga 0. Se puede utilizar una sentencia similar sin el a = sólo por sus efectos laterales:
--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 ejecutase un poco más rápido.