template <typename T>
void swap(T &a, T &b){
T c;
c = a;
a = b;
b = a;
cout << "swap(T &a, T &b)---" << endl;
}
void swap(int a, char b){
cout << "sawp(int,char)---" << endl;
}
void swap(int a, int b){
cout << "sawp(int,int)---" << endl;
}
Main:
int a = 10;
char b = 'b';
swap(a, b);//模板函数严格匹配 所以调用普通函数 sawp(int,char)---
swap(b, a);//同上 sawp(int,char)---
swap(a, a);// 调用sawp(int,int)-----
假如没有swap(int a, int b)函数则报错
原因:普通函数可以自动类型转换为(int,int),模板匹配同时满足,警告有多个函数实例与参数列表匹配,error
总结:函数模板可以像普通函数重载,但不允许自动类型转换,普通函数可以转换,当模板函数与普通函数同时匹配时,
编辑器优先选择普通函数。如果函数模板能产生更好的匹配,则调用模板函数swap(double ,double);
普通函数和模板函数
最新推荐文章于 2023-03-07 12:59:00 发布