如果我有代码:
int f(int a) { return a; }
double f(double g) { return g; }
int main()
{
int which = f(1.0f);
}
调用 f 的哪个重载,以及为什么?
答案 0 :(得分:8)
返回类型根本不被视为过载目的,因此您将获得双重版本。
答案 1 :(得分:3)
要理解为什么会这样,请考虑以下呼叫:
int bar = f(g(h(foo)));
由于重载决策只涉及参数,你可以独立地推导出h,然后是g,最后是f。如果涉及返回值,则需要同时推导它们。如果每个都有10次重载,则在第一种情况下,您将检查30种可能的重载,在第二种情况下,检查1000种可能的重载。如果您认为这种嵌套代码很少见,请考虑
std::cout << "int i = " << i << std::endl;