C++ 普通函数和函数模板调用机制

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值