87 votes

L'utilisation des enums anonymes

Quel est le but de l'anonymat enum des déclarations telles que :

enum { color = 1 };

Pourquoi ne pas simplement déclarer int color = 1 ?

109voto

sharptooth Points 93379

C'est un truc de type enum pour déclaration d'une constante entière en temps de compilation . Son avantage est qu'il garantit qu'aucune variable n'est instanciée et qu'il n'y a donc pas de surcharge à l'exécution. La plupart des compilateurs n'introduisent pas de surcharge avec les constantes entières de toute façon.

72voto

Motti Points 32921

Les Enums ne prennent pas de place et sont immuables.

Si vous avez utilisé const int color = 1; alors vous résoudriez le problème de mutabilité mais si quelqu'un prenait l'adresse de color ( const int* p = &color; ), il faudra lui allouer de l'espace. Cela peut ne pas être un gros problème, mais à moins que vous n'ayez explicitement veulent les gens à être en mesure de prendre l'adresse de color autant l'éviter.

De même, lorsqu'on déclare un champ constant dans une classe, il devra être static const (ce qui n'est pas vrai pour le C++ moderne) et tous les compilateurs ne supportent pas l'initialisation en ligne des membres statiques const.


Avis de non-responsabilité : Cette réponse ne doit pas être interprétée comme un conseil d'utilisation de l'Internet. enum pour toutes les constantes numériques. Vous devriez faire ce que vous (ou vos collègues) pensez être plus lisible. La réponse énumère juste quelques raisons pour lesquelles une pourrait préfèrent utiliser un enum .

9voto

Eran Zimmerman Points 2484

S'il s'agit d'un ancien code, alors enum a pu être utilisé pour le "hack enum".

Vous pouvez en savoir plus sur le "hack enum", par exemple, sur ce lien : enum hack

6voto

iammilind Points 29275
(1) int color = 1;

color est modifiable (accidentellement).

(2) enum { color = 1 };

color ne peut pas être modifié.

L'autre option pour enum est,

const int color = 1;  // 'color' is unmutable

Les deux sites enum et const int offrent exactement le même concept ; c'est une question de choix. En ce qui concerne la croyance populaire selon laquelle enum permettent d'économiser de l'espace, IMO il n'y a pas de contrainte de mémoire liée à cela, le compilateur est assez intelligent pour optimiser const int si nécessaire.

[Note : Si quelqu'un essaie d'utiliser const_cast<> sur un const int ; il en résultera un comportement non défini (ce qui est mauvais). Cependant, la même chose n'est pas possible pour enum . Mon préféré est donc enum ]

6voto

Une utilisation de ceci est quand vous faites de la métaprogrammation de modèle, parce que les objets enum ne sont pas des valeurs l, alors que static const le sont. C'était également une solution de contournement courante pour les compilateurs qui ne permettaient pas d'initialiser les constantes statiques intégrales dans la définition de la classe. Ceci est expliqué dans une autre question .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X