普通函数:可进行隐式类型转换
模板函数:函数严格按类型转换,不进行自动转换。
.cpp文件
#include <iostream>
using namespace std;
template <typename T1, typename T2>
T Max(T1 a, T2 b)
{
cout <<" Max(T1 a,T2 b)"<<endl;
return a > b ? a : b;
}
template <typename T, typename T, typename T>
T Max(T a, T b, T c)
{
cout <<" Max(T1 a,T2 b, T3 c)"<<endl;
return Max(Max(a, b), c));
}
void main()
{
int a =1;
int b =2;
cout<< Max(a, b) <<endl; //当函数模板和普通模板都符合时优先选择普通函数
cout<< Max<>(a, b) <<endl; //若显示函数模板,则使用<>类型列表。
cout<<Max(3.0, 4.0)<<endl; //如果函数模板产生更好地匹配,使用函数模板
cout<<Max(5.0, 6.0, 7.0)<<endl;
cout<<Max('a', 10)<<endl; //由于函数模板类型一样,所以调用普通函数,普通函数可以进行类型转换
system("pause");
return;
}