C++中函数的显式具体化不能使用函数默认参数数吗

c++&显示具体化和显示实例化_小鱼儿_新浪博客
c++&显示具体化和显示实例化
今天看到c++ primer plus 第8章--函数探幽,其中模版函数一节有2个比较容易搞混的概念:
在此记录以下:​
先看模版函数的定义:个人认为主要是为了节约代码量,对不同的类型完成相同的操作,如果使用函数重载的话,对于基本数据类型整形,就有short/int/long/longlong
4种,还不包括unsigned和signed,因此需要大量的重载函数,而内容都是雷同的,浪费复制粘帖的操作。因此采用模版函数来实现。​
1、使用 template
或​&&template
放到函数开头来声明模版。其中typename是新标准,class是为了向前兼容。因此写class较为通用。
​2、注意模版不能缩短可执行文件长度,在函数调用时,必须依据给出的参数类型由编译器生成实例化的模版函数(称作隐式实例化
instance),即 int add(int a, int b);
因此模版函数只是将程序员要做的事交给了编译器而已。
​3、模版可以重载,见上图的模版1和模版2、模版3,注意重载是用于改变输入参数类型或增加、减少输入参数个数(后者一般通过缺省参数实现!!)。
add(1,2)得到3,并且显示调用模版1;输入 add(1,2,3)
得到6,调用模版2;输入&​add(1,'A')得到'B',调用模版3;
注意模版3中多个类型的写法。
4、​模版的显示具体化(重点)
比如对于模版2而言,我们无法用其实现​ int*类型的加法,因此我们需要
specialize
这个模版,即对于int*型的输入特例化(具体化)这个模版,使其可以与原始模版不同的功能。注意显示具体化不能只声明,一定要有函数体才可以,否则vs会报链接错误!!!
我的理解是:显示具体化拓宽的模版的应用范围!原本add函数只能对重载了“+运算符”的类型使用,现在也可以对int
数组使用,但其实完全可以另写一个函数
add_array来实现这个功能,感觉就是为了好看(符合某种统一风格)所以写到一起!
​5、模版的显式实例化
模版的显式实例化其实只是一个声明:template int add(int,int); 注意​template后没有&&,而add后最好加上,即你自己要实例化的类型。
实际上对显式实例化的作用我也不很清楚,因为修改函数体的话使用具体化就可以了,实例化是不能带函数体的,因此参考&,大概能得到结论:
cout&&add(1, 2.1)
在只有模版1的情况下,会报错,因为2者的模版类型不匹配。但
​cout&&add(1,
2.1) 则可以通过,因为强制产生了一个double实例化,将1和2.1都视作double,得到结果3.1
​cout&&add(1,
2.1) 得到3,无庸置疑。
此外​显式实例化还有一个作用:
根据《在同一文件中使用同类型的显示实例化和显示具体化会报错的特点》​,先声明显示实例化,则后面的显示具体化如果存在,会报错,从而防止具体化该型模版!!
​c++11中,好像可以先具体化,再实例化声明,不会报错
总结:​
调用优先级:普通函数&显式具体化&显式实例化&普通模版
显式实例化用于人为选择特定的类型!
显式具体化用于修改某类型的函数具体功能!​
​模版匹配的方式非常复杂!慎用不同参数个数的模版重载!,详见第六版
博客等级:
博客积分:0
博客访问:1,423
关注人气:0
荣誉徽章:C++学习之函数模板_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C++学习之函数模板
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢模板函数与具体化函数的返回值必须一样吗?_c++吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:281,503贴子:
模板函数与具体化函数的返回值必须一样吗?收藏
模板函数模板函数与具体化函数的返回值必须一样吗?
马尔代夫、泰国、中国、马来西亚多国酒店全部订一晚送一晚,3天限时优惠
模板函数不能特化
楼主你说巧不巧
这两个函数的返回值一样为什么就行了?
你这是特化啊,我也没有什么办法
这样为什么就行了?
函数模板中的T代表标识符的类型吧,这个模板要求返回类型和第一个参数的类型一致,你的显式具体化中的第一个参数类型和返回类型不一致吧?我也是刚学C++,你看看我说的对不对
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 c 函数参数默认值 的文章

 

随机推荐