文章目录


在有多个函数和函数模板名字相同的情况下,编译器如下处理一
条函数调用语句
  1. 先找参数完全匹配的普通函数(非由模板实例化而得的函数)。
  2. 再找参数完全匹配的模板函数。
  3. 再找实参数经过自动类型转换后能够匹配的普通函数。
  4. 上面的都找不到,则报错
#include<iostream>
using namespace std;
template <class T>
T Max(T a,T b){
	cout<<"TemplateMax"<<endl;
	return 0;
}
template <class T,class T2>
T Max(T a,T2 b){
	cout<<"TemplateMax2"<<endl;
	return 0;
}
double Max(double a,double b){
	cout<<"MyMax"<<endl;
	return 0;
}
int main(void){
	int i = 4,j = 5;
	Max(1.2,3.4);
	Max(i,j);
	Max(1.2,3);
	Max(3,1.2);
	return 0;
}

MyMax
TemplateMax
TemplateMax2
TemplateMax2