当函数模板的名称和普通函数的名称一样时,会发生函数重载。
1 #include <iostream> 2 using namespace std; 3 4 //函数模板 5 template <typename T> 6 void myfun(T& x,T& y) 7 { 8 cout<<"我是函数模板"<<endl; 9 } 10 11 //普通函数 12 void myfun(int a,char c) 13 { 14 cout<<"我是普通函数"<<endl; 15 } 16 17 int main() 18 { 19 int x=10; 20 char y=‘Y‘; 21 22 myfun(x,y);//两个输入参数类型不一样,且与普通函数的输入类型一致,调用的是普通函数 23 myfun(y,x);//两个输入参数类型不一样,但与普通函数的输入类型不一致,调用的是普通函数,因为普通函数之间会有一个隐式的类型转换 24 myfun(x,x);//两个输入参数类型一样,调用的是函数模板,函数模板的本质是类型参数化,将严格按照类型匹配,不会进行自动类型转换 25 26 return 0; 27 }