将“Enum”和“Enum Class”中的Enum值转换为整数

问题描述 投票:0回答:2

Enum 和 Enum Class 有什么区别以及如何将 Enum 值转换为“Enum”和“Enum Class”中的整数?

c++ enums enum-class
2个回答
4
投票

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>(type::x);

2
投票

从 C++23 开始,有一个库函数

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

https://en.cppreference.com/w/cpp/utility/to_underlying

© www.soinside.com 2019 - 2024. All rights reserved.