<分区>
假设我有这段代码:
template <class T> void Swap (T& a, T& b)
{
a ^= b;
b ^= a;
a ^= b;
}
有什么区别:
重载
void Swap (int& x, int& s) { //some behavior }
特化
template<> void Swap <int> (int& x, int& s) { //some behavior }
谁更好?
<分区>
假设我有这段代码:
template <class T> void Swap (T& a, T& b)
{
a ^= b;
b ^= a;
a ^= b;
}
有什么区别:
重载
void Swap (int& x, int& s)
{
//some behavior
}
特化
template<> void Swap <int> (int& x, int& s)
{
//some behavior
}
谁更好?
最佳答案
重载定义了一个同名的方法,如果编译器找到这个重载的方法并且它适合调用它的参数类型,则编译器不会尝试进行模板类型推导。一个简单的调用,例如:
int a = 1, b = 2;
Swap(a,b); // calls the overloaded method
将转到重载方法。
要调用专门的方法,您需要显式地告诉编译器:
Swap<int>(a,b); // calls the specialized method
关于c++ - 特化和重载有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22786376/