二级C 重点难点分析:模板[3]

2008-02-23 05:39:56来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

14.1.3 考点3:函数模板的实例化

在调用模板函数时,编译系统依据实际所使用的数据类型生成某个具体函数定义的过程称为函数模板的实例化。在实例化过程中,是用实际类型(如int、long等)替代虚拟类型的。
实例化的过程或结果通常是看不见的,编译系统会根据函数调用的具体情况自动传递相应的模板实参,生成相应的函数实例。每一个实例就是个函数定义。
实例化过程中,除了能够用各种具体的C 固有数据类型取代虚拟类型,还能够用某些用户自定义类型来取代虚拟类型,这里的自定义类型包括结构体连同某些用户定义的类。

例14.1.4 下列程式的输出结果是 。[2004年9月 填空第13题]
#include <iostream>
using namespace std;
template <typename T>
T fun (T a, T b) {return (a<=b)?a:b;}
int main()
{
cout<<fun(3,6)<<','<<fun(3.14F,6.28F)<<endl;
return 0;
}
解析:本题定义了一个模板函数fun,其形参a、b及函数返回类型均为T类型。函数fun的功能是返回a、b中数值较小的数。在main函数中,第一次调用fun时,实际上是调用了“int fun(int a,int b)”这个函数,故返回整型数据“3”。第二次调用时,实际上是调用了函数“float fun (float a, float b)”,返回浮点型数据“3.14”。
答案:3,3.14

14.1.4 考点4:模板实参的省略

在调用模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,能够从两个不同的渠道获得信息:从“模板实参表”(在“<”和“>”之间)或从模板“函数实参表”(在“(”和“)”之间),“模板实参表”的信息优先于“函数实参表”的信息。假如从后者得到的信息已能够判断其中部分或全部虚拟类型参数所对应的实际类型,而且他们又正好是“模板形参表声明”中最后的若干参数,则在“模板实参表”中能够省略这几个参数。假如任何的模板实参都被省略了,则空表“<>”也能够省略。

但在以下情况中,模板实参是不能省略的。

① 从模板“函数实参表”中获得的信息有矛盾。例如,当编译系统从某一个函数实参中获得的信息是虚拟类型参数T(假设为T)对应的实际类型为int,可是从另一个函数实参中获得的信息却是虚拟类型参数T对应的实际类型为double时,就产生了矛盾。T不可能同时为
  本章节内容来自希赛全国电脑等级考试用书《电脑等级考试考点分析、题解和模拟——二级C 语言》。(购书请见 :http://shop.csai.cn/itbook/itbookinfo.asp?lbbh=10032460)

[1] [2] [3] [4]




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 二级C 重点难点分析:模板[2]

下一篇: 二级C 重点难点分析:输入、输出流[2]

热门词条
热门标签