01模板学习之函数模板和普通函数的区别

01模板学习之函数模板和普通函数的区别

1 函数模板和普通函数的区别
1)函数模板不支持隐式转换,必须全部匹配才能被调用,而普通函数支持隐式转换。
例如:

template<class T> //或者使用typename代替class,两者一样
int MyAdd(T a, T b){
	return a+b;
}

int MyAdd(int a, char b){
	return a+b;//普通函数自动转换char成int去计算。
}

int main(){

	int a=1;
	double b=2.0;
	MyAdd(a,b);//调用普通函数

	int c=1;
	int d=2;
	MyAdd(c,d);//优先调用模板
	
	return 0;
}

2)当函数模板和普通函数均完全匹配调用者的形参返回值,优先选择普通函数。
例如(将上面的代码char改成int即可):

template<class T> //或者使用typename代替class,两者一样
int MyAdd(T a, T b){
	return a+b;
}

int MyAdd(int a, int b){
	return a+b;//普通函数自动转换char成int去计算。
}

int main(){

	int a=1;
	int b=2;
	MyAdd(a,b);//两者都完全匹配时,调用普通函数
	
	return 0;
}

上面的两个例子可以总结成:

  • 1)函数模板和普通函数均完全匹配时,优先调用普通函数。
  • 2)函数模板完全匹配而普通函数不完全匹配时,优先调用模板函数。
  • 3)两者均不完全匹配时,并且编译器可以隐式转换则调用普通函数,否则报错。

3)函数模板支持重载
例如:

template<class T>
void MyPrintf(T a){
	
}

template<class T>
void MyPrintf(T a,T b){
	
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值