作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑以下代码:
#include <iostream>
#include <typeinfo>
enum class Colors
{
Red,
Blue,
Green
};
int main ()
{
std::cout << typeid(Colors::Red).name();
return 0;
}
上述程序的输出是6Colors
。即使枚举是“没有作用域的”(没有 class
关键字的枚举)也是如此。当定义另一个枚举时,比如 Animals
,它的类型名称变为 7Animals
。虽然这在未来可能很难考虑,但我很想知道为什么编译器会这样做。
最佳答案
您看到的是一个错位的名称 - 它旨在对命名空间范围和类型信息以及名称进行编码。
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;
}
关于c++ - 为什么枚举类型名称前面有枚举名称中的字符数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46357205/
我是一名优秀的程序员,十分优秀!