Enum和Enum Class有什么区别?如何在“Enum”和“Enum Class”中将Enum值转换为整数?
eoigrqb61#
C++有两种枚举:枚举类普通枚举下面是几个关于如何声明它们的示例:
enum class Color { red, green, blue }; // enum class enum Animal { dog, cat, bird, human }; // plain enum
这两者有什么区别?枚举类-枚举器名称是枚举的本地名称,它们的值不会隐式转换为其他类型(如另一个枚举或int)纯枚举-其中枚举数名称与枚举在同一范围内,它们的值隐式转换为整数和其他类型。在枚举中:
enum type{x=10,y,z=50,j}; int value = x;
在枚举类中:
enum class type{x=10,y,z=50,j}; int value= static_cast<int>(x);
gmol16392#
在C++23中,有一个库函数std::to_underlying,用于将枚举类的值转换为它们的底层值。
std::to_underlying
int main () { enum class Foo {a, b, c, d, e, f}; return std::to_underlying(Foo::f); // returns 5 }
https://godbolt.org/z/PE35eq78jhttps://en.cppreference.com/w/cpp/utility/to_underlying
2条答案
按热度按时间eoigrqb61#
C++有两种枚举:
枚举类
普通枚举
下面是几个关于如何声明它们的示例:
这两者有什么区别?
枚举类-枚举器名称是枚举的本地名称,它们的值不会隐式转换为其他类型(如另一个枚举或int)
纯枚举-其中枚举数名称与枚举在同一范围内,它们的值隐式转换为整数和其他类型。
在枚举中:
在枚举类中:
gmol16392#
在C++23中,有一个库函数
std::to_underlying
,用于将枚举类的值转换为它们的底层值。https://godbolt.org/z/PE35eq78j
https://en.cppreference.com/w/cpp/utility/to_underlying