首页 > 后端开发 > C++ > 在 C 中将无效值转换为枚举类时会发生什么?

在 C 中将无效值转换为枚举类时会发生什么?

DDD
发布: 2024-12-24 20:22:12
原创
370 人浏览过

What Happens When Casting an Invalid Value to an Enum Class in C  ?

将无效值转换为枚举类的影响

考虑代码片段:

enum class Color : char { red = 0x1, yellow = 0x2 };
char *data = ReadFile();
Color color = static_cast<Color>(data[0]);
登录后复制

会发生什么当 data[0] 为 100 时?根据 C 11 和 C 14 标准,结果值未指定,这意味着它可以是任何值。

CWG 1766:行为的改变

但是,在 CWG 1766 之后,将枚举范围之外的值转换为枚举类型现在可以调用未定义行为(UB)。此更改仅影响选择将缺陷应用到其 C 11 和 C 14 编译模式的编译器实现。

Switch 语句中的整体提升

在 switch 中语句中,条件转换为整型。对于无作用域枚举,此转换适用于整数;对于作用域枚举(枚举类和枚举结构),不会发生提升。无论如何,条件值在基础类型和 int 的范围内,因此仍应命中默认标签。

注意无作用域枚举

For没有固定基础类型的枚举,将值转换到范围之外可能会导致未指定的行为(在 CWG 1766 之前)或 UB(在CWG 1766)。这可以用枚举 ColorUnfixed 来说明:

enum ColorUnfixed { red = 0x1, yellow = 0x2 };
登录后复制

由于基础类型不固定,ColorUnfixed 的范围是从 0 到 3,因此 100 是无效值。

以上是在 C 中将无效值转换为枚举类时会发生什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板