Quand nous avons,
struct E { enum E_ { HELLO }; }; // 'E' is inheritable
alors pourquoi avons-nous besoin,
enum class E { HELLO }; // 'E' is not inheritable
IMO 2nd version n'offre pas plus de fonctionnalités que la 1st. Je ne pense pas que enum class
est introduit juste pour sauver 2 accolades {};
! Suis-je en train de manquer un aspect important?
Comme question mineure, existe-t-il une différence entre enum class
et enum struct
autre que la syntaxe (parce que les deux ont public
spécificateur d'accès)?
Outre ce qui a déjà été mentionné, un avantage de enum class
c'est mieux type sécurité - le enum class
les énumérateurs ne se convertissent pas implicitement en entiers.
Avons-nous vraiment besoin de "classe énum" en C++ 0x?
Non, nous n'avons pas "besoin" enum class
. Nous pouvons obtenir des fonctionnalités suffisamment équivalentes par d'autres moyens. Mais selon cette logique, nous n'avons pas "besoin" de beaucoup de choses en C++. Nous n'avons pas "besoin" de fonctions virtuelles et d'héritage, car nous pouvons simplement l'implémenter manuellement avec vtables et autres. Nous n'avons pas "besoin" de fonctions membres; ceux-ci peuvent être émulés en leur faisant prendre un argument supplémentaire.
Les fonctionnalités du langage existent pour faciliter la vie des programmeurs. Ce n'est pas parce que quelque chose peut être fait manuellement que cela doit l'être.
enum class
a les propriétés suivantes:
enum class
, mais cela est vrai pour la plupart des nouvelles fonctionnalités. Une fois que vous vous y êtes habitué, ça va.enum class
définitions. Sans cette macro, vous devez consacrer beaucoup d'efforts à faire fonctionner tous les cas d'angle. Et même ainsi, quelqu'un a dû écrire et déboguer cette macro.Donc non, nous n'en avons pas "besoin". Mais ils sont toujours un excellent ajout à la langue.
Dans le premier cas, le type de HELLO
n'est pas E
, alors que dans le second cas, le type de HELLO
est E
.
Pour une bonne démonstration de pourquoi c'est important, voir la réponse de Howard Hinnant à "émulation" enum class "ou alternative solide pour MSVC 10.0."
enum class
et enum struct
sont "sémantiquement équivalents" (c'est-à-dire les mêmes), selon C++ 0x FDIS §7.2/2.
Je pense que vous devez lire les autres avantages de ces nouvelles énumérations
Oui. On dirait que personne ne l'a signalé auparavant. Qu'en est-il si vous devez définir la taille d'un enum
et rester immobile selon la norme C++? enum class
peut faire. Et avec type sécurité comme déjà mentionné. Cela réduit autant de bogues possibles dans le code et le désordre en mélangeant int
et enum
s. Ce n'était jamais la même chose pour moi. Incroyable. par exemple., enum class foo : int16_t { ... }
Je suis sûr que chaque membre est un int16_t
et non à la mise en œuvre, décidez ce qui est "mieux" pour moi.
MODIFIER:
De plus, nous pouvons avoir des valeurs dupliquées (pas des noms) dans la liste. Ce qui a beaucoup de sens selon le contexte.