2020年计算机二级C++考点解析:模板

来源: 2020-10-15 20:52
  9.1函数模板

1函数模板的概念、定义与应用

函数模板是一系列相关函数的模型或样板,这些函数的源代码形式相同,只是所针对的数据类型不同。对于函数模板,数据类型本身成了它的参数,因而是一种参数化类型的函数。声明一个函数模板的格式是:

template模板形参表声明函数声明

其中的模板形参表声明是由一个或多个模板形参组成(如果是多个,需要用逗号隔开)。每个模板形参具有下面几种形式:

(1)typename参数名

(2)class参数名

(3)类型修饰参数名

这里的参数名可以是任意的标识符。在这三种形式中,前两种是等价的:在声明模板参数时,关键字typename与class可以互换。用typename或class声明的参数称为虚拟类型参数;而用类型修饰声明的参数则挑为常规参数,在形式上与普通的函数参数声明相同。格式中的函数声明与一般函数的声明类似,只是某些类型修饰符被虚拟类型参数所替代。

2模板实参的省略

在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板实参表(用和括起来的参数表)或从模板函数实参表(用(和)括起来的参数表),模板实参的信息优先于函数实参的信息。如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中后的若干参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则连空表也可以不要。因此,若x和y都是unsigned型,则addTounsigned(x,y,9)、addT(x、y、9)和addTo(x,y,9)三者是等价的。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能省略;或者虽然能够获得同样的信息,但在它后面还有其他不能省略的实参,则其自身还是不能省略。

下面列举几种模板实参不能省略的情况。

(1)从模板函数实参表获得的信息矛盾。

(2)需要获得特定类型的返回值,而不管参数的类型如何。

(3)虚拟类型参数没有出现在模板函数的形参表中。

(4)函数模板含有常规形参。

3函数模板的定制

对不同的数据类型在处理形式上的统一性是建立模板的基础。但是,这种统一性是相对的,个别数据类型有可能比较特殊,在处理形式上与大多数数据类型不一致。针对这样的特殊情况,可以通过重载模板函数进行定制。这样把重载的模板称为补充模板,相应地,原模板则称为主模板。

温馨提示:因考试政策、内容不断变化与调整,长职理培网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准! (责任编辑:长职理培)

软件操作 新人注册送三重礼

已有 22658 名学员学习以下课程通过考试

网友评论(共0条评论)

请自觉遵守互联网相关政策法规,评论内容只代表网友观点!

最新评论

点击加载更多评论>>

精品课程

更多
10781人学习

免费试听更多

相关推荐
图书更多+
  • 电网书籍
  • 财会书籍
  • 其它工学书籍
拼团课程更多+
  • 电气拼团课程
  • 财会拼团课程
  • 其它工学拼团
热门排行

最需教育客户端 资讯,试题,视频一手掌握

去 App Store 免费下载 iOS 客户端