2013-07-23 12 views
12

sah ich dieses Konstrukt in dem Projekt, das ich arbeite:Warum sollte eine enum-Deklaration const sein?

const enum SomeEnum 
{ 
    val0, 
    val1, 
    val2 
}; 

Was ist der Zweck der const hier?

+0

Ich glaube, das ist ungültiger C++ - Code, aber Visual Studio akzeptiert es (GCC nicht). Darüber hinaus akzeptiert Visual Studio auch 'const Klasse A {/ * ... * /};'. –

+0

Zugehöriger MSVC-Fehler: [MSVC const enum type] (http://stackoverflow.com/q/14923403) –

Antwort

13

Nichts. Eigentlich ist es laut G ++ ein Compilerfehler:

error: qualifiers can only be specified for objects and functions 

Allerdings ist in C erlaubt, aber nutzlos. GCC sagt:

warning: useless type qualifier in empty declaration 

Das Problem ist, dass const nur für Objekte gelten (Variablen) und die Elementfunktionen, aber nicht beschränkt auf Grundtypen.

8

Es macht keinen Unterschied in Ihrem Code machen, aber es wäre in diesem Fall:

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

Hier VAL0 wäre eine const variabel sein (mit dem Wert val0). TBH, aber es ist nicht von großem Nutzen.

+4

Ich denke, es macht * einen Unterschied: "Es sollte nicht kompiliert werden". – Nawaz

+0

@Nawaz Ich habe gesehen, dass es nicht kompiliert, aber das könnte nur der Compiler sein. Gibt es etwas in den Regeln dagegen? Ich habe gesehen, dass Compiler sowohl 'static struct X {}; –

+1

Das gleiche wie 'const int;' oder ähnliches, würde ich mir vorstellen. – chris

Verwandte Themen