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

例如:

enum Test
{
    A, B
};

int a = 1;

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


当前回答

你的代码

enum Test
{
    A, B
}

int a = 1;

解决方案

Test castEnum = static_cast<Test>(a);

其他回答

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

你的代码

enum Test
{
    A, B
}

int a = 1;

解决方案

Test castEnum = static_cast<Test>(a);

引出最后一个问题,“我如何将a转换为Test:: a类型”,而不是严格要求在那里有一个类型转换,并在几年后才回答,因为这似乎是一个流行的问题,没有人提到替代方案,根据c++ 11标准:

5.2.9静态铸造 ... 表达式e可以显式地转换为类型T 如果声明,则使用static_cast<T>(e)形式的static_cast T T (e);对于一些发明的临时变量t(8.5)来说是良构的。 这种显式转换的效果与执行相同 声明和初始化,然后使用临时 变量作为转换的结果。

因此,直接使用t(e)的形式也可以,为了简洁起见,你可能更喜欢它:

auto result = Test(a);

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

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

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

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

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