267

如何将 int 转换为 C++ 中的枚举?

例如:

enum Test
{
    A, B
};

int a = 1;

如何转换a为 type Test::A

4

5 回答 5

305
int i = 1;
Test val = static_cast<Test>(i);
于 2012-07-12T13:33:14.567 回答
80
Test e = static_cast<Test>(1);
于 2012-07-12T13:33:15.513 回答
29

你的代码

enum Test
{
    A, B
}

int a = 1;

解决方案

Test castEnum = static_cast<Test>(a);
于 2012-07-12T13:48:54.580 回答
16

分拆结束的问题,“我如何将 a 转换为类型Test::A”,而不是严格要求在那里有演员表,并迟到几年才回答,因为这似乎是一个流行的问题,没有其他人提到过替代方案,根据 C++11 标准:

5.2.9 静态转换

...对于某些发明的临时变量(8.5) ,如果声明 格式正确,则表达式e可以T 使用static_cast形式的 a 显式转换为类型。这种显式转换的效果与执行声明和初始化,然后使用临时变量作为转换的结果相同。static_cast<T>(e)T t(e);t

因此,直接使用表单t(e)也可以,您可能更喜欢它的整洁:

auto result = Test(a);
于 2019-08-15T21:27:08.503 回答
1

Test castEnum = static_cast<Test>(a-1);将投射aA. 如果您不想子结构 1,您可以重新定义enum

enum Test
{
    A:1, B
};

在这种情况下Test castEnum = static_cast<Test>(a);,可用于强制a转换为A.

于 2019-08-16T14:55:23.703 回答