函数模板知识点梳理

函数模板是一种泛型编程工具,它定义了一个函数家族,适用于多种数据类型。模板编译包括两个阶段:检查模板代码语法和实例化期间检查调用有效性。模板参数分为模板参数和用参数,后者在函数模板的圆括号内声明。模板实参可以显式或通过推导确定,但不能用于推导返回类型。重载函数模板时,应注意避免模板与非模板函数之间的自动类型转换问题。
摘要由CSDN通过智能技术生成
函数模板代表一个函数家族。
通常而言,并不是把模板编译成一个可以处理任何类型的单一实体,而是对于实例化模板参数的每种类型,都从模板产生一个不同的实体。


关于模板编译,会有2个过程,分别发生在:(请注意VC++与GCC之间的不同)
1. 实例化之前,先检查模板代码本身,查看语法是否正确,在这里会发现错误的语法,如遗漏分号等。
2. 在实例化期间,检查模板代码,查看是否所有的调用都有效。在这里会发现无效的调用,如该实例化类型不支持某些函数调用等。

函数模板有两种类型的参数:
1. 模板参数: 位于函数模板名称的前面,在一对尖括号内部进行声明:
template <typename T>
2. 用参数:位于函数模板名称之后,在一对圆括号内部进行声明:
max(T const& a, T const& b);
可以额根据需要声明任意数量的模板参数。然而,在函数模板内部(这一点和类模板不同),不能指定缺省的模板实参。
当模板参数和调用参数没有发生关联,或者不能有调用参数来决定模板参数的时候,你在调用时就必须显式指定模板实参。然而,模板实参演绎并不适合返回类型,因为RT不会出现在函数调用参数的类型里面,因为,函数调用并不能推导出RT,也就是必须显式地指定模板实参列表。


重载函数模板
inline
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值