概述
普通函数与函数模板调用规则
规则
- 函数模板可以像普通函数一样被重载
- C++编译器优先考虑普通函数
- 如果函数模板可以产生一个更好的匹配,则选择模板
- 可以通过空模板实参列表的语法限定编译器只通过模板匹配
实例
#include<iostream>
using namespace std;
template<typename T>
void fun(T& a, T& b) {
cout << "a" << a << "-b: " << b << endl;
cout << "我是模板函数" << endl;
}
void fun(int a, char b) {
cout << "a" << a << "-b: " << b << endl;
cout << "我是函数调用" << endl;
}
int main() {
int a = 1;
char b = 'z';
fun(a, b);//普通函数调用,可以进行隐式的类型转换
fun(b, a);// 普通函数调用
fun(a, a);//调用函数模板(本质:参数类型化),严格按照类型匹配,不会进行类型自动转换
return 0;
}
#include<iostream>
using namespace std;
int Max(int a, int b) {
cout << "int Max(int a,int b)" << endl;
return a > b ? a : b;
}
template<typename T>
T Max(T a, T b) {
cout << "T Max(T a,T b)" << endl;
return a > b ? a : b;
}
template<typename T>
T Max(T a, T b,T c) {
cout << "T Max(T a,T b,T c)" << endl;
return Max(Max(a, b), c);
}
int 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', 100) << endl;//调用普通函数可以隐式类型转换
return 0;
}
最后
以上就是开心小丸子为你收集整理的函数模板遇上函数重载的全部内容,希望文章能够帮你解决函数模板遇上函数重载所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复