Accessing inactive union members through char
2 months ago
- #Undefined Behavior
- #Aliasing Rules
- #C++
- 文章讨论了一项C++26标准库功能std::is_within_lifetime,并针对其提案示例中未定义行为(UB)的担忧进行说明。
- 具体示例涉及通过char访问非活跃联合体成员,初看疑似UB,但由于C++别名规则实际上合法有效。
- C++允许通过char、unsigned char或std::byte类型访问任何对象的底层表示,这使得该示例合法。
- 文章解释字符类型可以别名化内存中的任何对象,这条规则源于C++对C语言的传承。
- 别名规则中的这一例外确保通过字符类型检查原始内存表示不属于UB行为。
- 最终结论强调必须理解C++标准中此类细则,才能编写真正正确的代码。