在c++中如何将int类型转换为enum类型?
例如:
enum Test
{
A, B
};
int a = 1;
我如何转换类型测试::a ?
在c++中如何将int类型转换为enum类型?
例如:
enum Test
{
A, B
};
int a = 1;
我如何转换类型测试::a ?
当前回答
int i = 1;
Test val = static_cast<Test>(i);
其他回答
只是提一下,如果枚举的底层类型恰好是固定的,从c++ 17开始,可以简单地编写
enum Test : int {A, B};
int a = 1;
Test val{a};
和,当然,Test val{1};也是有效的。
相关的cppreference部分如下(重点是我的):
如果以下所有条件都为真,则可以使用列表初始化从没有强制转换的整数初始化枚举: 初始化是直接列表初始化 初始化列表只有一个元素 枚举是有作用域的或无作用域的,底层类型是固定的 转换是非窄化的
Test e = static_cast<Test>(1);
int i = 1;
Test val = static_cast<Test>(i);
引出最后一个问题,“我如何将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);
你的代码
enum Test
{
A, B
}
int a = 1;
解决方案
Test castEnum = static_cast<Test>(a);