代码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;
}
两种情况下的专用和函数有什么不同吗? 我的编译器为两种情况提供相同的输出。 我总是遵循第一种方法。与第二种方法不同的是,我们第一次看到它是一种专门的功能吗?
答案 0 :(得分:2)
第一个是模板专用,第二个是函数重载。它在解决规则中很重要 - 完全匹配的重载将通过专用模板进行选择。
答案 1 :(得分:0)
如果你有函数sum2:
template<typename T>
T sum2(T t1, T t2)
{
...
return sum<T>(t1, t2);
}
它不会调用重载的变体1,但会从变体2中调用模板特化。