c++ - 模板参数推导和模板参数

标签 c++ templates

我认为我们可以在没有模板参数的情况下调用模板函数。 为什么仅当我将模板参数指定为 double 时此代码才有效?

#include <iostream>
template <typename T>
T max(T x, T y)
{
    return x > y ? x : y;
}

int main()
{
    cout<<::max(3,4.7)<<"\n";     //Error
    cout<<::max<int>(3,4.7)<<"\n"; //Error
    cout<<::max<double>(3,4.7)<<"\n"; //Works
}

最佳答案

模板参数推导需要应用于函数的所有参数,在第一种情况下(仅不编译的情况)它将推导参数为 intdouble 。因为它们不完全匹配,所以参数推导失败。正如您已经意识到的那样,答案是禁用类型推导并自己提供类型参数(第二行和第三行)。

对于明确特化的函数模板和普通函数,参数随后会受到隐式或用户定义的类型转换(double 到 int、int 到 double,或通过类构造函数和转换运算符)。然而,在模板参数推导期间,不会执行此类类型转换。

关于c++ - 模板参数推导和模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10463822/

相关文章:

c++ - 如何处理模板中的成员变量

c++ - 将 flex 和 bison 编译成 cpp

c++ - VS2010 附加包含目录无法工作

c++ - 将每种类型包装在模板类中的可变参数模板中

c++ - 奇怪的输出 : why would this code give any meaningful output, 更不用说这个了?

c++ - 将类型存储为变量?对于模板类?

c++ - 编译器是否需要内联基类中的虚函数和最终函数?

c++ - 锦标赛树(获胜者树)在哪些情况下会有帮助?

c++ - 删除和删除与 vector 中的条件匹配的指针

c++ - 有没有办法从模板类的完整类型中获取其类型?