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?

È stato utile?

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 e sizeof 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top