【发布时间】:2026-01-30 14:00:01
【问题描述】:
在 C++ 中,有符号类型的溢出是未定义的行为。以下示例是否也是未定义的行为?
#include <limits.h>
int f() {
int a = INT_MAX;
int b = -1;
return a + b;
}
这不是数学上下文中的溢出,但 CPU 会看到它可能像
add 0x7fffffff 0xffffffff.
【问题讨论】:
-
您不能谈论 语言 意义上的未定义行为并将其与 CPU 的观点混为一谈。不,这不是未定义的行为,因为没有溢出。
-
@joemartin94 听说过涡轮增压器吗?
-
2,147,483,647 + (-1) = 2,147,483,646,就像 5 + (-1) = 4。
-
@joemartin94 但是,你是完全正确的 OP 应该选择一个。
-
我就是不明白这个问题,为什么会是UB。你甚至可以问,
-1 + -1是不是 UB?毕竟是0xffffffff + 0xffffffff。当然不是UB。
标签: c++ undefined-behavior integer-overflow