假设我有这段代码:
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
}
谁更好?
答案 0 :(得分:1)
重载定义了一个具有相同名称的方法,并且编译器不会尝试进行模板类型推导,以防它找到这个重载方法并且它适合调用它的参数类型。一个简单的电话,如:
int a = 1, b = 2;
Swap(a,b); // calls the overloaded method
将转到重载方法。
要调用专用方法,需要明确告诉编译器:
Swap<int>(a,b); // calls the specialized method