c++ - 专用模板函数与不带模板关键字的专用模板函数

标签 c++ templates template-specialization

代码1:

template<typename T>
T sum(T t1, T t2)
{
    return t1 + t2;
}

int sum(int a, int b)
{
    return a + b + a;
}

int main()
{
    sum(10,20);
    return 0;
}

代码2:

template<typename T>
T sum(T t1, T t2)
{
    return t1 + t2;
}

template<>
int sum<int>(int a, int b)
{
    return a + b + a;
}

int main()
{
    sum(10,20);
    return 0;
}

这两种情况下的专门求和函数有什么区别吗? 我的编译器对于这两种情况给出相同的输出。 我一直遵循第一种方法。区别只是在于第二种方法一看就知道是一个专门的函数吗?

最佳答案

第一个是模板特化,第二个是函数重载。这在解析规则中很重要 - 将通过专用模板选择完全匹配的重载。

关于c++ - 专用模板函数与不带模板关键字的专用模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32124359/

相关文章:

c++ - 返回对局部变量及其行为的引用

c++ - 如何将纪元时间转换为年份

c++ - 如何从相似的模板类构建对象

c++ - 模板 typedef 不是类或命名空间名称

c++ - 指针和 C 风格数组变量的专用模板

C++ 模板/ostream 运算符问题

c++ - 为什么 DLL 没有复制到输出目录? C++ Visual Studio

c++ - 未在基类模板中声明成员

c++ - 仅在模板中专门构造函数,保持最佳性能和整洁的界面

c++ - 派生类的部分类模板特化