模板化函数无法将值乘以-1

时间:2017-06-19 12:46:36

标签: c++ g++ c++14

请注意以下简单代码,
使用命令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;
}

请解释一下这种行为!!

1 个答案:

答案 0 :(得分:2)

INT_MIN推导出的类型为int -INT_MIN可能导致整数溢出(如果INT_MIN = -INT_MAX - 1在大多数平台上都为真),从而导致未定义的行为。