【问题标题】:Do parameter or return type implicit conversions take priority in C++?参数或返回类型隐式转换在 C++ 中是否优先?
【发布时间】: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 的哪个重载被调用,为什么?

【问题讨论】:

    标签: c++ implicit


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-07-05
        • 1970-01-01
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多