请注意以下简单代码,
使用命令g++ -std=c++14 -g -O2 CODE.cpp
编译它会产生奇怪的输出:
Why this ?? -2147483648
# include<bits/stdc++.h>
using namespace std;
# define pc(x) putchar(x)
template <class T>
inline void pd(T num, char ch = ' '){
num = -num;
cout << "Why this ?? " << num << endl;
}
int main(void){
pd(INT_MIN);
return 0;
}
请解释一下这种行为!!
答案 0 :(得分:2)
INT_MIN
推导出的类型为int
-INT_MIN
可能导致整数溢出(如果INT_MIN = -INT_MAX - 1
在大多数平台上都为真),从而导致未定义的行为。