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