专业化和重载之间的区别是什么

时间:2014-04-01 12:48:31

标签: c++ templates overloading template-specialization

假设我有这段代码:

template <class T> void Swap (T& a, T& b)
{
    a ^= b;
    b ^= a;
    a ^= b;
}

有什么区别:

  1. 过载

    void Swap (int& x, int& s)
    {
        //some behavior 
    }
    
  2. 专业化

    template<> void Swap <int> (int& x, int& s)
    {
        //some behavior 
    }
    
  3. 谁更好?

1 个答案:

答案 0 :(得分:1)

重载定义了一个具有相同名称的方法,并且编译器不会尝试进行模板类型推导,以防它找到这个重载方法并且它适合调用它的参数类型。一个简单的电话,如:

    int a = 1, b = 2;
    Swap(a,b);         // calls the overloaded method

将转到重载方法。

要调用专用方法,需要明确告诉编译器:

    Swap<int>(a,b);    // calls the specialized method