如何在C ++中将int转换为枚举?
例如:
enum Test
{
A, B
};
int a = 1;
如何将a
转换为Test::A
类型?
答案 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。