web-dev-qa-db-fra.com

C ++ déclarant une énumération statique et une énumération dans une classe

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.

14
user3731622

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.

14
Praetorian

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.

0
Marcus Müller