函数模板

/*
1 函数模板可以像普通函数一样被重载
2 C++编译器优先考虑匹配普通函数
3 如果函数模板可以产生一个更好更精确的匹配,那么选择模板
4 可以通过空模板实参列表的语法限定编译器只匹配模板函数
*/

/*
函数模板不允许自动类型转化,隐式的类型转换编译器会报错
普通函数能够进行自动类型转换
*/

#include <iostream>
using std::cout;
using std::cin;
using std::endl;


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


void main()
{
    cout << Max(1, 3) << endl;//优先匹配普通函数
    cout << Max<>(2, 4) << endl;//显式告知编译器,只匹配模板函数

    cout << Max(3.0, 4.0) << endl;

    cout << Max(5.0, 6.0, 7.0) << endl;

    cout << Max('a', 80) << endl;

    cin.get();
    return;
}

函数模板的深入理解

1.编译器并不是提前把函数模板处理成能够处理任意类型的函数,这样效率很低
2.编译器编译期间,通过函数模板参数,生成不同类型的函数

编译器会对函数模板进行两次编译
―在声明的地方对模板代码本身进行编译
―在调用的地方对参数替换后的代码进行编译

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值