函数模板的重载

函数模板的重载


#include <iostream>
using namespace std;
template <class T>
T max(T a, int b)
{
    cout << "调用模板函数" << endl;
    return a > b ? a : b;
}
double max(double a, int b)
{
    cout << "调用普通函数" << endl;
    return a > b ? a : b;
}
void main()
{
    cout << max(2, 3.6) << endl;
}

我们来看这段代码:
我们知道,模板函数是不支持参数转化的(除了很少的情况),但是一定要注意,这里所指的函数模板是全部形参都是模板类型的函数模板,如果函数模板中含有非模板类型的时候,也是可以进行类型转化的。

比如这句max(2,3.6) ,在进行模板函数推断的时候,会把模板中的T推断为int,这时就生成了一个模板函数int max(int a,int b) ,这之后就是按普通函数的匹配方式进行,把3.6强制转化为3(double->int)。

我把主函数的代码改成:cout << max(7.2, 3.6) << endl;

这个时候,模板函数推断出来的是double max(double a,int b)
与普通函数的**double max(double a, int b)**一模一样,意味着会调用普通函数

转载于:https://my.oschina.net/CRAZYZONE/blog/644783

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值