2012-07-31 31 views
7

Hace poco vi lo siguiente en el código base:¿Qué es esta extraña sintaxis de operador condicional?

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

Si a < b, a continuación, se ejecuta a=b y bRes es cierto. ¿Qué está pasando exactamente aquí? Los documentos para el operador condicional no mencionan nada sobre expresiones de encadenamiento.

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

+2

que es el operador coma ... – MFH

Respuesta

11

Eww. Ese es un uso del comma operator. a=b, true hace exactamente lo que usted dice. Ejecuta cada expresión y da como resultado el valor de la última expresión.

+1

1 eww ... fue mi primera reacción así. –

+1

+1 Jajajaja ... todavía no has visto un uso real de "eww" del operador de coma. Mi favorito de todos los tiempos está en [el codificador de rango portátil de Subbotin] (http://koders.com/cpp/fidAD810238688D2DDBC02B8FAF0A8EAC8DBD68604D.aspx?s=subbotin#L21). Solo mira esa línea por menos de 30 segundos, y luego intenta explicar lo que está pasando. – Damon

+0

Muy bien, gracias! – nolegs

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; 
+0

esta es una manera MUCHO mejor de escribir lo mismo. ¡Buen trabajo! –

+0

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

+2

@KerrekSB: Buen punto. ¿Qué tal 'const bool bRes = a Andrey