在c++中如何将int类型转换为enum类型?

例如:

enum Test
{
    A, B
};

int a = 1;

我如何转换类型测试::a ?


当前回答

int i = 1;
Test val = static_cast<Test>(i);

其他回答

int i = 1;
Test val = static_cast<Test>(i);
Test e = static_cast<Test>(1);

只是提一下,如果枚举的底层类型恰好是固定的,从c++ 17开始,可以简单地编写

enum Test : int {A, B};
int a = 1;
Test val{a};

和,当然,Test val{1};也是有效的。

相关的cppreference部分如下(重点是我的):

如果以下所有条件都为真,则可以使用列表初始化从没有强制转换的整数初始化枚举: 初始化是直接列表初始化 初始化列表只有一个元素 枚举是有作用域的或无作用域的,底层类型是固定的 转换是非窄化的

你的代码

enum Test
{
    A, B
}

int a = 1;

解决方案

Test castEnum = static_cast<Test>(a);

Test castEnum = static_cast<Test>(a-1);如果你不想要子结构体1,你可以重定义枚举:

enum Test
{
    A:1, B
};

在本例中Test castEnum = static_cast<Test>(a);可以用来转换a到a。