C++中是否有实现定义行为的完整列表
Is there a complete list of Implementation-Defined behavior in C++?
我在回复一条关于我的答案的评论:C工作面试-筛选和比较,发现我找不到C++认为的"实现定义的行为"的完整列表。我知道这类事情有三类:未定义的行为、实现定义的行为和未指定的行为;然而,大多数讨论似乎都围绕着未定义的行为展开,当讨论实现定义的行为时,最多会给出一个例子。一般来说,我倾向于编写大量深入到这一领域的代码,并且我知道应该期待什么样的行为;我仍然希望能够有知识地评论它的有效性。我还想指出的是,我认为运营社区中有很多错误诊断是未定义的,而平台确实对它们进行了很好的定义。
请注意,我对给定平台如何选择定义此类行为不太感兴趣,而是想列出C++标准定义的"实现定义"类别中的所有行为。
标准本身定义了实现定义行为的所有情况,C++标准草案的末尾有一个Index of implementation-defined behavior
,它提供了主题以及主题在哪个页面上被处理,例如:
time_get::do_get_date的附加格式,689
对齐,76
校准附加值,76
事实上,每个编译器都应该记录所有实现定义的行为以及如何处理它们。例如,这里是gcc的C++实现定义行为部分和gcc的C实现定义行为。据我所知,C++标准与C99标准草案没有什么不同为未指定或不定义行为提供了参考。因此,您必须在文档中搜索未定义的和未指定的,才能找到所有实例。
C99标准草案分别为Annex J.1
、J.2
和J.3
中未指定、不定义和实现定义的行为提供了参考。
需要注意的是,未定义的行为可以由实现指定为定义良好的行为,但他们必须记录它。在您的特定示例中,看起来确实违反了严格的别名规则,但您使用类型双关语的替代建议是定义良好的,因为C89。
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 跟随整数索引列表的自定义类迭代器
- 使用模板类的自定义列表类型中的内存泄漏
- 列表参数的类型定义
- 如何使用Q_PROPERTY公开自定义对象列表
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 在C++中循环访问自定义结构列表的小问题
- "extern"声明以及带有和不带参数列表的类模板实例的后续定义
- 动态填充的组合框不显示文本,列表未定义
- 提升精神:如何在使用文本说明符解析双打列表时使用自定义逻辑
- 使用自定义比较函数在类内进行列表排序
- C++列表初始化允许多个用户定义的转换
- 自定义链表const_iterator无法遍历列表的非const实例
- C++函数定义中参数列表后面额外一对括号的含义
- 初始值设定项列表与构造函数赋值与变量定义
- 将参数列表未知的可变参数模板类型定义为 std::map 值类型
- 使用命令列表解析自定义文件
- 打印/修改类对象的特定成员变量,其类定义列表 (STL) 包含的元素类型
- 如果有多个结构数组,如何使用初始化列表定义结构变量的成员
- 如何确定 (x, y) 点是否位于由边界点列表定义的多边形内