enum class枚举值2147483648无法窄化为int类型报错如何解决
报错原因
默认情况下,enum class的底层类型是有符号32位int,其取值范围为-2^31 ~ 2^31-1(即-2147483648 ~ 2147483647)。你给C32赋的值0x80000000等于2147483648,刚好超出了有符号int的最大值上限,因此触发了窄化转换报错。
解决方案
你只需要**显式指定enum class的底层类型为无符号32位整数uint32_t**即可,这个修改完全不会影响你需要的enum class命名空间特性,你仍然可以用CATEGORIES::xxx的形式访问枚举值。
操作步骤如下:
- 引入头文件
<cstdint>以使用标准定义的固定宽度整数类型 - 在枚举类声明后追加
: uint32_t指定底层类型
修改后的代码示例:
#include <cstdint> enum class CATEGORIES : uint32_t { C01 = 0x00000001, C02 = 0x00000002, C03 = 0x00000004, ... C26 = 0x02000000, C27 = 0x04000000, C28 = 0x08000000, C29 = 0x10000000, C30 = 0x20000000, C31 = 0x40000000, C32 = 0x80000000, // 不再报错 };
如果你的场景有特殊要求不能用无符号类型,也可以把底层类型指定为int64_t,取值范围足够容纳0x80000000,同样可以解决报错。
内容的提问来源于stack exchange,提问作者Rahul Iyer
相关产品推荐
相关产品推荐

