2013-07-23 13 views
12

Ho visto questo costrutto nel progetto Lavoro:Perché una dichiarazione enum dovrebbe essere marcata const?

const enum SomeEnum 
{ 
    val0, 
    val1, 
    val2 
}; 

Qual è lo scopo della const qui?

+0

Credo che questo sia un codice C++ non valido ma Visual Studio lo accetta (GCC no). Inoltre, Visual Studio accetta anche 'const class A {/ * ... * /};'. –

+0

Errore MSVC correlato: [tipo const enum MSVC] (http://stackoverflow.com/q/14923403) –

risposta

13

Niente affatto. In realtà, secondo G ++ è un errore del compilatore:

error: qualifiers can only be specified for objects and functions 

Tuttavia, in C è consentito, ma inutile. GCC dice:

warning: useless type qualifier in empty declaration 

Il problema è che const applica solo agli oggetti (variabili) e le funzioni membro, ma non per tipi di base.

8

Non fa una differenza nel codice, ma sarebbe in questo caso:

const enum SomeEnum 
{ 
    val0, 
    val1, 
    val2 
} VAL0 = val0; 

Qui, VAL0 sarebbe un const variabili (con il valore val0). Tuttavia, TBH non è di grande utilità.

+4

Penso che * fa * faccia la differenza: "non dovrebbe compilare". – Nawaz

+0

@Nawaz Ho visto che non è stato compilato, tuttavia potrebbe essere solo il compilatore. C'è qualcosa nelle regole contro di esso? Ho visto compilatori che accettano e rifiutano 'struct statico X {};'. –

+1

La stessa cosa di fare 'const int;' o simili che immaginerei. – chris

Problemi correlati