//第二十三模板 4普通函数,函数模板与具体化函数模板的优先级
//我们定义了个普通函数,然后又定义了一个该函数的模板,接着又重载了这个函数的模板,那么这里就存在一个优先级的问题,即先调用哪里个函数
//1 普通函数和函数模板的执行次序
/*#include <iostream>
using namespace std;
template <class T>
void show(T a){cout<<"模板函数"<<endl;}
void show(int a){cout<<"普通函数"<<endl;}
int main()
{
int a=5;
show(a);//普通函数调用在先,模板函数调用在后
//不过这个前提是执行调用函数的必须与普通函数的参数类型
show(3.14);
return 0;
}*/
// 2 函数模板与具体化函数模板的执行次序
/*#include <iostream>
using namespace std;
template <class T>
void show(T &a){cout<<"模板函数"<<a<<endl;}
template<> void show<int>(int&a){ cout<<"具体化模板函数"<<a<<endl;}
int main()
{
int a=9;
show(a);
float b =2.5;
show(b);
return 0;
}*/
//3 具体化函数模板与普通函数的优先级
/*#include <iostream>
using namespace std;
template<class T>
void show(T a){ cout<<"模板函数"<<endl;}
template<> void show<int>(int a){ cout<<"具体化模板函数"<<a<<endl;}
void show(int a){ cout<<"普通函数"<<a<<endl;}
int main()
{
int a=5;
show(a);
return 0;
}*/
//我们看到输出了”普通函数“这说明在函数名,参数类型和参数个数相同的情况,普通函数优先级高于具体化函数模板,而具体化函数模板又高于函数模板