【发布时间】:2020-07-22 03:55:50
【问题描述】:
当我在参数 n 的值为 2147483647 时执行下面的代码时,我从 if 阶段得到错误(运行时错误:有符号整数溢出:2147483647 + 1 不能在类型“int”中表示)。但是会打印“INT_MAX”。你能解释一下为什么我会收到这个错误吗?
class Solution {
public:
int myFunct(int n) {
if (n == INT_MAX) cout << "INT_MAX" << endl;
return 0;
}
};
【问题讨论】:
-
您使用的是什么编译器和版本?
-
2147483647是INT_MAX的值,如果int是 32 位类型。表达式2147483647 + 1导致 32 位int溢出(这是 C++ 中的未定义行为)。我希望INT_MAX + 1也一样。 -
显示的代码无法执行,因为没有
main。您收到的错误表明您有一个类似n + 1的表达式,其中n是2147483647,但代码中没有显示这样的表达式,因此在给定代码中不太可能发生错误(if (n == INT_MAX)不是错误的来源)。 -
请向minimal reproducible example 提供完整的可编译代码和完整的编译器输出
-
抱歉没有解释。这段代码是在leetcode.com上运行的,所以我不用写main(),leetcode使用C++17标准。
标签: c++ runtime-error overflow