C++ déclarant statique enum vs enum dans une classe
Quelle est la différence entre le static enum
et enum
définitions lorsqu'elle est définie à l'intérieur d'une déclaration de classe comme celle ci-dessous?
class Example
{
Example();
~Example();
static enum Items{ desk = 0, chair, monitor };
enum Colors{ red = 0, blue, green };
}
Aussi, puisque nous sommes à la définition des types dans une classe, que faisons-nous les appeler? Par analogie, si je définis une variable dans une classe, nous l'appelons une variable membre.
- Quel compilateur que vous utilisez? Il me surprendrait si cette compile, comme
static
ne serait pas beaucoup de sens ici. - Si vous êtes à l'aide de C++11, pensez à utiliser
enum class
. - Le
static
spécificateur n'est pas valide dans une déclaration d'enum. Cela ne devrait pas compiler. - Je suis à l'aide de Visual Studio 2012. Savez-vous où je peux trouver le compilateur utilisé? Je vois la Plate-forme d'Outils de Visual Studio 2012 (v110).
- J'ai ouvert une invite de commande Visual Studio et a couru cl.exe. Il dit que je suis en utilisant Microsost (R) C/C++ Compilateur Optimisant la Version 17.00.50727.1 pour X86.
- Double Possible de C++: ce n'est "statique " enum" signifie
- Voir aussi Qu'est “statique " enum” signifie en C++?
Vous devez vous connecter pour publier un commentaire.
static
ne peut pas être appliqué àenum
déclarations, de sorte que votre code n'est pas valide.De N3337, §7.1.1/5 [dcl.stc]
Un
enum
déclaration est aucun de ceux-ci.Vous pouvez créer une instance de la
enum
et faire questatic
si vous le souhaitez.Dans ce cas
items
est juste comme n'importe quel autre membre de données statiques.C'est un MSVC bug; à partir du lié rapport de bug, il semble que le compilateur va permettre à la fois
static
etregister
de stockage des prescripteurs surenum
déclarations. Le bug a été fermé en fixe, donc peut-être que le correctif sera disponible dans VS2015.static
ici n'est pas à appliquer à l'ensemble des 0 membres des données déclarées dans la présente déclaration. Après tout, si vous n'avezstatic enum Items { ... } item;
, il serait valide.enum
est comme décrire ce qu'est un jeu de regard comme si vous étiez à en créer un. Ce n'est pas vraiment de la création de quoi que ce soit, même si, contrairement à votre exemple.static
être appliqué à une déclaration d'enum qui ne veut pas déclarer toutes les variables / données membres---si une déclaration d'enum peut déclarer 0 des variables de type, alors pourquoi ne peut-il pas déclarer 0 statique des variables de ce type? Mais la norme interdit explicitement de le faire, et je suis maintenant convaincu que gcc et clang sont corrects.static
est un C++ de stockage spécificateur. Cela signifie que la valeur de ce membre de la classe est la même pour toutes les instances de la classe. Rien de spécial au sujet des enums ici.EDIT: Même le
static
balise wiki a une explication. Exactement sur ce sujet.EDIT2: Ah, j'ai mal lu votre code. Il n'y a pas statique enum. Vous pouvez avoir une variable statique de type enum qui détient une valeur.
enum
est pas variable.