我正在学习用 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。我对这种行为感到非常困惑。
为什么只有在传递最负数时才会观察到这种行为?(如果 short与 -32768一起使用,行为是相同的——事实上,在任何情况下,负数和正数都有相同的二进制表示)
使用编译器: g + + (GCC)4.8.5