代码之家  ›  专栏  ›  技术社区  ›  Nicholas White

参数或返回类型隐式转换在C++中是否优先?

  •  2
  • Nicholas White  · 技术社区  · 17 年前

    如果我有代码:

    int f(int a) { return a; }
    double f(double g) { return g; }
    
    int main()
    {
        int which = f(1.0f);
    }
    

    哪种超载 f 被称为,为什么?

    2 回复  |  直到 17 年前
        1
  •  8
  •   Mark Ransom    17 年前

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

        2
  •  3
  •   MSalters    17 年前

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

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

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

    std::cout << "int i = " << i << std::endl;