El operador C ternario nunca puede cortocircuito, ya que sólo se evalúa una única expresión de una (la condición), para determinar un valor dado por las expresiones b y c , si podría ser devuelto cualquier valor.
El siguiente código:
int ret = a ? b : c;
Es casi equivalente al siguiente código:
int ret;
if(a) {ret = b} else {ret = c}
La expresión a puede estar formada por otros operadores como && o || que pueden cortocircuitar porque pueden evaluar dos expresiones antes de devolver un valor, pero eso no se consideraría como el operador ternario haciendo cortocircuito, sino como los operadores usados en la condición como lo hace en una declaración if regular.
Actualizar:
Existe cierto debate acerca de que el operador ternario es un operador de cortocircuito. El argumento dice que cualquier operador que no evalúe todos sus operandos hace un cortocircuito de acuerdo con @aruisdante en el comentario a continuación. Si se le da esta definición, entonces el operador ternario estaría en cortocircuito y en el caso de que esta sea la definición original, estoy de acuerdo. El problema es que el término "cortocircuito" se usó originalmente para un tipo específico de operador que permitía este comportamiento y esos son los operadores lógicos / booleanos, y la razón por la que son solo esos es lo que intentaré explicar.
Siguiendo el artículo Evaluación de cortocircuito , la evaluación de cortocircuito solo se refiere a operadores booleanos implementados en el lenguaje de una manera en la que saber que el primer operando hará que el segundo sea irrelevante, es decir, para el operador && siendo el primer operando falso , y para el || siendo el operador verdadero el primer operando , la especificación C11 también lo indica en 6.5.13 Operador lógico AND y 6.5.14 Operador lógico OR.
Esto significa que para que se identifique el comportamiento de cortocircuito, esperaría identificarlo en un operador que debe evaluar todos los operandos al igual que los operadores booleanos si el primer operando no hace irrelevante al segundo. Esto está en línea con lo que está escrito en otra definición de cortocircuito en MathWorks en la sección "Cortocircuito lógico", ya que el cortocircuito proviene de los operadores lógicos.
Como he estado tratando de explicar el operador ternario de C, también llamado ternario si, solo evalúa dos de los operandos, evalúa el primero y luego evalúa un segundo, cualquiera de los dos restantes depende del valor del el primero. Siempre hace esto, no se supone que esté evaluando los tres en ninguna situación, por lo que no hay "cortocircuito" en ningún caso.
Como siempre, si ve que algo no está bien, por favor escriba un comentario con un argumento en contra y no solo un voto negativo, eso solo empeora la experiencia de SO, y creo que podemos ser una comunidad mucho mejor que una que solo vota negativamente las respuestas. uno no está de acuerdo.