INT_MAX +( - 1)是未定义的行为吗?

Paw*_*ica 2 c++ integer-overflow undefined-behavior

在C++中,签名类型的溢出是未定义的行为.以下示例是否也是未定义的行为?

#include <limits.h>

int f() {
  int a = INT_MAX;
  int b = -1;
  return a + b;
}
Run Code Online (Sandbox Code Playgroud)

它不是数学上下文中的溢出,但CPU可能会看到它 add 0x7fffffff 0xffffffff.

pay*_*yne 10

你给出的例子不是溢出.

来自维基百科(https://en.wikipedia.org/wiki/Integer_overflow):

...当算术运算尝试创建一个超出可以用给定位数表示的范围的数值时发生整数溢出- 大于最大值或小于最小可表示值.

INT_MAX +( - 1)不在int类型可表示的范围之外,并且定义了结果.


Pas*_* By 8

由于结果在INT_MAX + (-1)可表示的值的范围内int,因此它被很好地定义

您应该停止将语言视为装配或机器代码上的薄层.

关于程序的未定义,没有CPU,只有程序运行的抽象机器.