【问题标题】:c++ template - More than one instance of overloaded function matches the argument list [duplicate]c ++模板 - 多个重载函数实例与参数列表匹配[重复]
【发布时间】:2020-09-07 01:50:09
【问题描述】:

为什么只有最后一次调用 max 引发错误?

错误 C2668: 'max': 对重载函数的模糊调用

#include <iostream>
#include <type_traits>

template<typename T1, typename T2>
auto max(T1 t1, T2 t2)
{
    return t1 < t2 ? t2 : t1;
}

template<typename RT, typename T1, typename T2>
RT max (T1 a, T2 b)
{
return b < a ? a : b;
}

int main()

    max<long double>(4.5, 4);
    max<double>(4.5, 4);
    return 0;
}

【问题讨论】:

  • 做了一些研究。对于 max(4.5, 4);实例化结果是 max 并且对于 max(4.5, 4),实例化结果都是 。跨度>

标签: c++ templates overloading


【解决方案1】:

给定max&lt;long double&gt;(4.5, 4);,对于第一个max,它的第一个模板参数T1指定为long doubleT24推导出为int。对于第二个maxRT指定为long doubleT1推导为doubleT2推导为int。然后第二个在重载决议中获胜,因为它是完全匹配的,而第一个需要从 double 隐式转换到 long double

另一方面,给定max&lt;double&gt;(4.5, 4);,对于第一个maxT1 指定为doubleT2 推导出为int。对于第二个maxRT指定为doubleT1推导为doubleT2推导为int。他们都是完全匹配的。

【讨论】:

    猜你喜欢
    • 2012-10-12
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2012-03-22
    • 1970-01-01
    相关资源
    最近更新 更多