Typo alla pagina di MSDN “C ++ espressioni costanti”?
-
12-10-2019 - |
Domanda
Si dice a pagina MSDN per C ++ espressioni costanti che:
costanti non integrale deve essere convertito (in modo esplicito o implicitamente) per tipi interi di essere legale in un'espressione costante. Pertanto, il codice seguente è legale:
const double Size = 11.0; char chArray[(int)Size];
Almeno in VC ++ 10,0 seconda linea produce: "Errore C2057: espressione costante previsto". Quindi è legale su qualche altro compilatore o è la pagina di MSDN semplicemente sbagliato?
Soluzione
Secondo 5.19 / 1:
integrante espressione-costante can coinvolgere solo letterali (2.13), enumeratori, variabili
const
o membri dati statici di integrale o tipi di enumerazione inizializzati con espressioni costanti (8.5), non tipo parametri di modello di integrale o tipi di enumerazione esizeof
espressioni. letterali galleggianti (2.13.3) può apparire solo se sono cast integrale o censimento tipi .
Dalla mia comprensione il codice non è valido, mentre la seguente è legale:
char chArray[(int)11.0];
Altri suggerimenti
Questo non è secondo legale di standard C ++. Vedere 5.19 / 2 per le regole nel spec.