#include <iostream>
using namespace std;
/************************************************************************/
/*普通函数和函数模板调用规则
1.普通函数和函数模板都可以实现,则优先调用普通函数;
2.可以通过空模板参数列表来强制性调用函数模板;
3.函数模板也可以发生函数重载;
4.如果函数模板可以产生更好匹配,优先调用函数模板;
/************************************************************************/
//普通函数
void swapfun(int &a, int &b)
{
int tmp = a;
a = b;
b = tmp;
cout<<"普通函数调用"<<endl;
}
//函数模板
template<typename T>
void swapfun(T &a, T &b)
{
T tmp = a;
a = b;
b = tmp;
cout<<"函数模板调用"<<endl;
}
//函数模板重载
template<typename T>
void swapfun(T &a, T &b, T &c)
{
T tmp = a;
a = b;
b = tmp;
cout<<"函数模板重载调用"<<endl;
}
void test1()
{
int a = 10;
int b = 20;
//1.普通函数和函数模板都可以实现,优先调用普通函数,即使普通函数只有声明
//swapfun(a, b);
//2.空模板参数列表强制调用函数模板(有些编译器调用的函数普通函数,可能版本低原因)
swapfun<>(a, b);
//3.函数模板可以发生重载
swapfun(a, b, a);
//4.函数模板可以更好的匹配,普通函数调用会发送隐式转换,但模板直接就调用更加符合
char c ='a';
char d = 'b';
swapfun(c, d);
}
int main()
{
test1();
return 0;
}
C++ 普通函数和函数模板调用机制
最新推荐文章于 2023-08-10 22:03:39 发布