¿Qué es esta extraña sintaxis del operador condicional?

Recientemente vi lo siguiente en el código base:

bool bRes = (a < b) ? a=b, true : false;

If a < b, entonces a=b se ejecuta y bRes es verdad. Qué está pasando aquí? Los documentos para el operador condicional no mencionan nada sobre el encadenamiento de expresiones.

editar: para que quede claro, obtengo la parte del operador condicional, es el a=b, true como una sola expresión que me confundió.

preguntado el 31 de julio de 12 a las 13:07

2 Respuestas

Eww. Ese es un uso de la operador de coma. a=b, true hace exactamente lo que dijiste. Ejecuta cada expresión y da como resultado el valor de la última expresión.

Respondido 31 Jul 12, 13:07

+1 Jajajaja... todavía no has visto un uso real "eww" del operador coma. Mi favorito de todos los tiempos está en Codificador de rango sin transporte de Subbotin. Solo mire esa línea por menos de 30 segundos y luego trate de explicar lo que está pasando. - Damon

Ese es un código correcto, pero escrito en un estilo extraño. El lenguaje permite usar el operador de coma de esta manera.

El equivalente es

bool bRes;
if (a < b)
{
 a = b;
 bRes = true;
}
else
 bRes = false;

Respondido 31 Jul 12, 13:07

esta es una manera MUCHO mejor de escribir lo mismo. ¡Buen trabajo! - Woodrow Douglass

Pero ahora es asignación y no inicialización. En el código original, bien podríamos haber declarado bRes para ser const... - Kerrek SB

@KerrekSB: Buen punto. Qué tal si const bool bRes = a < b; if (bRes) a = b; ? - Andrey

@Andrey: ¡Mejor! Cualquier código del tipo bool w = condition ? true : falseo es if-equivalente como en su ejemplo, debe evitarse a toda costa. - Kerrek SB

@Andrey: mi comentario anterior trata más bien sobre el uso del operador de coma dentro de los inicializadores en general; Estoy de acuerdo en que este ejemplo en particular es bastante feo. - user396672

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.