C++中是否有实现定义行为的完整列表

Is there a complete list of Implementation-Defined behavior in C++?

本文关键字:列表 定义 是否 实现 C++      更新时间:2023-10-16

我在回复一条关于我的答案的评论: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.1J.2J.3未指定不定义实现定义的行为提供了参考。

需要注意的是,未定义的行为可以由实现指定为定义良好的行为,但他们必须记录它。在您的特定示例中,看起来确实违反了严格的别名规则,但您使用类型双关语的替代建议是定义良好的,因为C89