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

How to cast int to enum in C++?

本文关键字:转换 枚举 int 中将 C++      更新时间:2023-10-16

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

例如:

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

如何将a转换为类型 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 static_cast<T>(e)如果声明 对于一些发明的临时变量t(8.5(,T t(e);格式良好。这种显式转换的效果与执行声明和初始化,然后使用临时变量作为转换的结果。

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

auto result = Test(a);

提一下,如果enum的底层类型恰好是固定的,从 C++17 开始,可以简单地写

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

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

相关的cpp偏好部分如下(强调我的(:

如果满足以下所有条件,则可以使用列表初始化从不带强制转换的整数初始化枚举:

  • 初始化是直接列表初始化
  • 初始值设定项列表只有一个元素
  • 枚举的作用域或无作用域,基础类型固定
  • 转换是非窄的

Test castEnum = static_cast<Test>(a-1);会将a投射到A。如果不想下结构 1,可以重新定义enum

enum Test
{
    A:1, B
};

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