Errata en la página de MSDN “C ++ Expresiones Constantes”?
-
12-10-2019 - |
Pregunta
Se dice en página de MSDN para C ++ expresiones constantes que:
constantes no integral debe ser convertido (ya sea explícitamente o implícitamente) a tipos enteros para ser legal en una expresión constante. Por lo tanto, el siguiente código es legal:
const double Size = 11.0; char chArray[(int)Size];
Al menos en VC ++ 10.0 la segunda línea produce: "C2057 error: se espera expresión de la constante". Entonces, ¿es legal en algún otro compilador o es la página de MSDN simplemente mal?
Solución
Según 5,19 / 1:
Un integrante constante-expresión lata implicar sólo literales (2.13), enumeradores, variables de
const
o miembros de datos estáticos de integrante o tipos de enumeración inicializados con expresiones constantes (8,5), no tipo parámetros de plantilla de integral o tipos de enumeración, ysizeof
expresiones. literales flotantes (2.13.3) pueden aparecer sólo si son echado a integrante o la enumeración tipos .
Desde mi entender el código no es válido, mientras que el siguiente es legal:
char chArray[(int)11.0];
Otros consejos
Eso no es de acuerdo legal de estándar de C ++. Ver 5.19 / 2 para las reglas en la especificación.