¿Qué pasa con static_cast con múltiples argumentos?
-
09-09-2019 - |
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.
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.