我正在做一些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?
答案 0 :(得分:0)
f(-2)
代替f(-2.5)
,但@Mark Ranson指出&#34;除非您添加其他限定符&#34;否则整数文字始终为int
。
他的意思是,即使你使用了f(-2),它也会得到与f(2)相同的结果..这显然会导致过载失效。