【发布时间】:2008-12-02 17:43:32
【问题描述】:
如果我有代码:
int f(int a) { return a; }
double f(double g) { return g; }
int main()
{
int which = f(1.0f);
}
f 的哪个重载被调用,为什么?
【问题讨论】:
如果我有代码:
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;
【讨论】: