专业化和重载有什么区别

what is the difference between Specialization and Overloading

本文关键字:什么 区别 重载 专业化      更新时间:2023-10-16

假设我有以下代码:

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 
    }
    

谁更好?

重载定义了一个同名的方法,如果编译器找到这个重载的方法并且它符合调用它的参数类型,编译器将不会尝试进行模板类型推断。一个简单的调用,例如:

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

将转到重载方法。

要调用专用方法,您需要显式告诉编译器:

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