函数模板的重载
#include <iostream>
using namespace std;
template <class T>
T max(T a, int b)
{
cout << "调用模板函数" << endl;
return a > b ? a : b;
}
double max(double a, int b)
{
cout << "调用普通函数" << endl;
return a > b ? a : b;
}
void main()
{
cout << max(2, 3.6) << endl;
}
我们来看这段代码:
我们知道,模板函数是不支持参数转化的(除了很少的情况),但是一定要注意,这里所指的函数模板是全部形参都是模板类型的函数模板,如果函数模板中含有非模板类型的时候,也是可以进行类型转化的。
比如这句max(2,3.6) ,在进行模板函数推断的时候,会把模板中的T推断为int,这时就生成了一个模板函数int max(int a,int b) ,这之后就是按普通函数的匹配方式进行,把3.6强制转化为3(double->int)。
我把主函数的代码改成:cout << max(7.2, 3.6) << endl;
这个时候,模板函数推断出来的是double max(double a,int b)
与普通函数的**double max(double a, int b)**一模一样,意味着会调用普通函数