首页 > 解决方案 > 有符号整数溢出未定义行为

问题描述

这个问题中,有这个答案说明

有符号整数溢出是未定义的行为

但它没有参考 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 在哪里以及如何使有符号溢出未定义行为?

标签: c++language-lawyerundefined-behavior

解决方案


由于针对这种情况打开了拉取请求,因此对第 7.2 章的引用似乎是错误的,应该改为 7.1。


推荐阅读