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
?
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
?
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.
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
.
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
(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
]
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 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.