为什么最负的int值会导致有关歧义函数重载的错误?
我正在学习C ++中的函数重载,并遇到了以下问题: void display(int a) { cout << "int" << endl; } void display(unsigned a) { cout << "unsigned" << endl; } int main() { int i = -2147483648; cout << i << endl; //will display -2147483648 display(-2147483648); } 据我了解,该int范围内给出的任何值(在我的情况下int为4字节)都将被调用,display(int)而该范围外的任何值都将是模棱两可的(因为编译器无法确定要调用哪个函数)。int除最小值外,它对于整个值范围均有效,即-2147483648编译失败并显示错误 重载的呼叫display(long int)是模棱两可的 但是对取相同的值int并打印该值将给出2147483648。我真的对这种行为感到困惑。 为什么仅当传递最大负数时才会观察到此行为?(如果将a short与-32768-一起使用,其行为是相同的-实际上,在任何情况下,负数和正数具有相同的二进制表示形式) 使用的编译器:g ++(GCC)4.8.5