C++标准模板入门

1.函数模板
首先我们来实现一个交换函数,该函数一般用在测试排序算法
在这里插入图片描述
通过函数的重载我们可以实现不同类型的交换函数,但是这样子写只要有新类型的出现就需要增加对应的函数。而且代码的可维护性也比较低,一个出错可能所以的重载均出错。
为解决这类问题C++提供了这样一个模具,通过给这个模具不同的类型,来生成具体类型的代码。

函数模板的格式
template<typename T1, typename T2,…,typename Tn>
例如:
在这里插入图片描述
typename是用来定义模板参数的关键字,也可以使用class。

函数模板的原理
在编译器编译阶段,编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。

例如当用int类型使用函数模板时,编译器通过对实参类型的推演,将T确定为int类型,然后产生一份专门处理int类型的代码。

函数模板的实例化
隐式实例化:让编译器根据实参推演模板参数的实际类型
在这里插入图片描述
上面注释的语句不能通过编译,因为在编译期间需要推演实参类型,但模板参数只有一个T,编译器无法确定T为int还是double而报错。
有两种处理方式:1.用户自己强转 2.使用显示实例化

显示实例化:在函数名后的<>中指定模板参数的实际类型
在这里插入图片描述
如果类型不匹配,编译器会先尝试进行隐式类型转换,转换不成功会报错。

模板参数的匹配原则
在这里插入图片描述
1.一个非模板函数可以和一个同名的模板函数同时存在,而且该函数模板还可以被实例化为这个非模板函数。
在这里插入图片描述
2.对于非模板函数和同名函数模板,如果其他条件都相同,在调用时会优先调用非模板函数,如果模板可以产生一个具有更好匹配的函数,会优先调用模板函数。

3.模板函数不允许自动类型转换,但普通函数可以进行自动类型转换。

2.类模板
类模板的定义格式

在这里插入图片描述
在这里插入图片描述
类模板的实例化
类模板的实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>里就行。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值