¿Qué es esta extraña sintaxis del operador condicional?
Frecuentes
Visto 333 equipos
7
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ó.
2 Respuestas
11
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
4
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 : false
o 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 c++ conditional-operator or haz tu propia pregunta.
+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