如何在C++中将 int 转换为枚举
How to cast int to enum in C++?
如何在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
。
相关文章:
- 错误:从"int"到枚举c++的转换无效
- 将作用域枚举转换为基础类型
- 枚举类的 C 样式强制转换到基础类型 char 的引用
- 用于 boost::p roperty_tree 的通用枚举转换器
- 在编译时将强类型枚举器转换为其基础类型?
- 将整数值转换为以枚举为基础的字符串
- 如何在没有映射的情况下在枚举和字符串之间进行转换?
- C++枚举类 std::size_t 隐式转换
- 安全地将枚举类从基础类型转换
- SWIG-将C++枚举转换为Python枚举
- 如果 int 是"not within the enums range",为什么将 int 转换为强类型枚举会编译?
- 如何编写模板以转换为基于整数/枚举的模板化类型
- 将指向类型化/大小的枚举的指针转换为指向基础类型的指针是否安全?
- C++枚举类:强制转换为不存在的条目
- 如何将C++代码中的枚举转换为 C
- 为什么这个枚举不转换为 int?
- 失败的证明转换字符串到枚举类
- 枚举类的重载强制转换运算符
- 返回强制转换枚举值C++的函数
- 转换枚举中整数的安全方法