2

如果我有代码:

int f(int a) { return a; }
double f(double g) { return g; }

int main()
{
    int which = f(1.0f);
}

调用f的哪个重载,为什么?

4

2 回答 2

8

根本不考虑返回类型用于重载目的,因此您将获得双重版本。

于 2008-12-02T17:44:56.673 回答
3

要了解为什么会这样,请考虑以下调用:

int bar = f(g(h(foo)));

由于重载决议只涉及参数,您可以独立地推导出 h,然后是 g,最后是 f。如果涉及返回值,则需要同时推导它们。如果每个都有 10 个重载,则在第一种情况下,您将检查 30 个可能的重载,在第二种情况下检查 1000 个可能的组合。如果您认为这种嵌套代码很少见,请考虑

std::cout << "int i = " << i << std::endl;
于 2008-12-03T14:14:21.030 回答