Consultez le code suivant:Pourquoi les noms de types d'énumération sont précédés du nombre de caractères dans le nom de l'énumération?
#include <iostream>
#include <typeinfo>
enum class Colors
{
Red,
Blue,
Green
};
int main()
{
std::cout << typeid(Colors::Red).name();
return 0;
}
La sortie du programme ci-dessus est 6Colors
. Cela est vrai même si l'énumération est "non délimitée" (enum sans le mot-clé class
). Lorsqu'une autre énumération est définie, par exemple Animals
, son nom de type devient 7Animals
. Bien que cela puisse difficilement être quelque chose à considérer dans le futur, je suis curieux de savoir pourquoi le compilateur fait cela.
« La sortie du programme ci-dessus est' 6Colors' » --- cela dépend de la implémentation (version du compilateur, plateforme) – Brian
Ceci est appelé "name mangling", et chaque compilateur [a sa propre façon de le faire] (https://en.wikipedia.org/wiki/Name_mangling#How_different_compilers_mangle_the_same_functions). –
Visual Studio 2017 sort «enum Colors» et «enum Animals». * hausser les épaules * Voodoo –