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

时间:2012-07-12 13:30:36

标签: c++ casting enums

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

例如:

enum Test
{
    A, B
};

int a = 1;

如何将a转换为Test::A类型?

5 个答案:

答案 0 :(得分:197)

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

答案 1 :(得分:63)

Test e = static_cast<Test>(1);

答案 2 :(得分:20)

您的代码

enum Test
{
    A, B
}

int a = 1;

解决方案

Test castEnum = static_cast<Test>(a);

答案 3 :(得分:2)

提出一个最后的问题:“如何将a转换为类型Test::A”,而不是刻意在其中放置 cast 的要求,并迟迟回答了几年根据C ++ 11标准,这似乎是一个很普遍的问题,似乎没有人提到过替代方法:

  

5.2.9静态投射

     

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

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

auto result = Test(a);

答案 4 :(得分:0)

Test castEnum = static_cast<Test>(a-1);会将a强制转换为A。如果您不想使用子结构1,则可以重新定义enum

enum Test
{
    A:1, B
};

在这种情况下,'Test castEnum = static_cast(a);'可以将a强制转换为A。