为什么枚举类型名称前面带有枚举名称中的字符数?

时间:2017-09-22 05:06:24

标签: c++ enums

请考虑以下代码:

#include <iostream>
#include <typeinfo>

enum class Colors
{
    Red,
    Blue,
    Green
};

int main ()
{
    std::cout << typeid(Colors::Red).name();
    return 0;
}

上述程序的输出为6Colors。即使枚举是&#34;没有范围&#34;这也是正确的。 (没有class关键字的枚举)。如果定义了另一个枚举,例如Animals,则其类型名称将变为7Animals。虽然这可能在未来很难考虑,但我很想知道为什么编译器会这样做。

1 个答案:

答案 0 :(得分:2)

您看到一个错位的名称 - 用于编码命名空间范围和类型信息以及名称。

Boost有一种方便的跨平台方式来解析这些你可能会觉得有趣的名字:

#include <iostream>
#include <typeinfo>
#include <boost/core/demangle.hpp>

enum class Colors
{
    Red,
    Blue,
    Green
};

int main ()
{
    std::cout << boost::core::demangle(typeid(Colors::Red).name());

    return 0;
}