gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:43:13 24 4
gpt4 key购买 nike

考虑以下代码:

#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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com