【发布时间】:2021-09-08 07:37:01
【问题描述】:
在this question中,有this answer声明
有符号整数溢出是未定义的行为
但它没有提及 C++ 标准,因此我尝试自己在 ISO/IEC 14882(2020-12 第六版)中查找它。在第 148 页的第 7.7 节中,我发现 (5.7)
具有未定义行为的操作,如第 4 条到第 15 条 ^84 中所述;
参考脚注 84(草稿中的76)告诉我
这包括,例如,有符号整数溢出 (7.2)、某些指针算术 (7.6.6)、被零除 (7.6.5) 或某些移位操作 (7.6.7)。
接下来我在 7.2 章节中搜索“未定义”,我只得到了 7.2.1 (11) 和 (11.3) 和 7.2.2 (1) 但我要么不明白这些句子或它们与有符号整数溢出无关。
脚注 84 中的引用不正确吗?它应该引用 7.1 (4) 吗?
如果在计算表达式期间,结果未在数学上定义或不在其类型的可表示值范围内,则行为未定义。
如果引用正确,有人可以用简单的语言解释 7.2 在何处以及如何使有符号溢出未定义行为?
【问题讨论】:
-
7.2为一整节eel.is/c++draft/expr#prop |我的猜测会是,部分编号会随着时间的推移而变化,并且脚注中的链接没有更正,并且 7.1.4 中的内容在创建脚注时位于第 7.2 节中。跨度>
-
@KamilCuk 之前,7.2 是数组到指针的转换,之前是枚举声明。也许“7.2”从来都不是正确的数字
-
你可以参考C++20草稿timsong-cpp.github.io/cppwp/n4868
-
@LanguageLawyer 抱歉,如果链接错误。这是我的第一个语言律师问题。看来我需要更熟悉这个标签中的问题是如何编写的,并且我需要熟悉 C++ 标准的在线资源。对于这个问题,恕我直言,这并不重要。甚至这些(旧版本?)链接也不正确。
-
链接不正确,但段落和注释编号与已发布标准中的相同并且稳定。 Here is the fix
标签: c++ language-lawyer undefined-behavior