Quelle est la différence entre le static enum
et enum
définitions lorsqu'elles sont définies dans une déclaration de classe comme celle illustrée ci-dessous?
class Example
{
Example();
~Example();
static enum Items{ desk = 0, chair, monitor };
enum Colors{ red = 0, blue, green };
}
De plus, comme nous définissons des types dans une classe, comment les appelons-nous? Par analogie, si je définis une variable dans une classe, nous l'appelons une variable membre.
static
ne peut pas être appliqué aux déclarations enum
, donc votre code n'est pas valide.
Depuis N3337, §7.1.1/5 [dcl.stc]
Le spécificateur
static
ne peut être appliqué qu'aux noms de variables et de fonctions et aux unions anonymes ...
Une déclaration enum
n'est rien de tout cela.
Vous pouvez créer une instance de enum
et en faire static
si vous le souhaitez.
class Example
{
enum Items{ desk = 0, chair, monitor };
static Items items; // this is legal
};
Dans ce cas, items
est comme tout autre membre de données statiques .
Il s'agit d'un bug MSVC ; d'après le rapport de bogue lié, il semble que le compilateur autorise les spécificateurs de stockage static
et register
sur les déclarations enum
. Le bogue a été fermé comme corrigé, donc le correctif sera peut-être disponible dans VS2015.
static
est un spécificateur de stockage C++. Cela signifie que la valeur de ce membre de la classe est la même pour toutes les instances de la classe. Ici, rien de spécial sur les énumérations.
EDIT: Même le wiki de balise static
a une explication. Sur exactement ce sujet.
EDIT2: Oh, j'ai mal lu votre code. Il n'y a pas d'énumération statique. Vous pouvez avoir une variable statique d'un type énum qui contient une valeur.