过载是不明智的

时间:2017-11-13 03:22:15

标签: c++ c++11

我正在做一些C ++面试问题(为了好玩)。我找到了以下内容:

  

根据C ++ 11标准,该程序的输出是什么?

#include <iostream> 

void f(int){std::cout << 1;}
void f(unsigned){std::cout << 2;}

int main()
{
 f(-2.5);
}
     

答案是存在编译错误,因为重载是不明确的。

但为什么呢?编译器不清楚-2.5是否为带符号int,因此输出1?

1 个答案:

答案 0 :(得分:0)

好吧。您正尝试使用浮点数调用该函数... 尝试使用整数值... 如果您使用f(-2)代替f(-2.5),但@Mark Ranson指出&#34;除非您添加其他限定符&#34;否则整数文字始终为int。 他的意思是,即使你使用了f(-2),它也会得到与f(2)相同的结果..这显然会导致过载失效。