Pregunta

Puede alguien decirme lo que este reparto tiene para el efecto (además de establecer happyNumber a 1337), o ninguna en absoluto, y si no tiene ningún otro efecto, ¿cómo es que puedo escribir código como este ??? Es esto un error del compilador, o algún "escondido función" de C ++?

int happyNumber = static_cast<int>(123.456, TRUE, "WTF" , false , "IS" , NULL , "GOING" , 0xff , "ON???" , 1337);

Me sorprendió esto sería compilar en absoluto. Lo encontré a través de un error en el que me puse accidentalmente el segundo parámetro a algo que estaba destinado a entrar en una llamada a la función de la expresión que se está colando. Esto dio lugar a un error desagradable en que el objeto fue arrojado desde el segundo parámetro, llamando a la función con sólo un argumento. Se compiló ... Y no tenía, inicialmente, Sonic ...

Estoy utilizando Microsoft Visual C ++ 2008.

¿Fue útil?

Solución

Reparto estático toma un argumento, pero su argumento es una expresión, y puede incluir expresiones del operador de coma . Coma se utiliza en situaciones en las que desee evaluar dos o más expresiones a la vez por sus efectos secundarios, por ejemplo:.

int i, j;
for (i=0, j=0; i < 10; i++,j++) {
    // do stuff
}

Es un poco útil porque sin ella sólo se podía evaluar una expresión de cada uno para el inicializador, condición, y continuar partes del bucle (o cualquier otro lugar se espera una expresión). Por lo general no hacen el código más claro, sin embargo, y la semántica son impares. A medida que ha observado, una secuencia separada por comas se evalúa al valor de su última expresión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top