请考虑以下代码:
#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
。虽然这可能在未来很难考虑,但我很想知道为什么编译器会这样做。
答案 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;
}