关于c++ 模板调用

template<classTl,classT2,classT3>T1sum(T2,T3);doubledl,d2;则下列调用中,错误的是A)sum<double,dou... template<class Tl,class T2,class T3>T1 sum(T2,T3);
  double dl,d2;
  则下列调用中,错误的是
  A)sum<double,double,double>(dl,d2);
  B)sum<double;double>(d1,d2);
  C)sum<double>(d1,d2);
  D)sum(d1,d2);

求大神解释一下
展开
 我来答
风飞尘落
2015-11-14 · 心理咨询师,中国科学院心理研究所
风飞尘落
采纳数:26463 获赞数:163425

向TA提问 私信TA
展开全部
所谓函数模板实际上是建立一个通用函数,其涵涵素类型额形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就称为函数模板。
调用代码:

#include <iostream>
using namespace std;
class A
{
public:
template<typename T> void A1(T temp);
template<typename T> A(T temp);

};
template<typename T>
void A::A1(T temp)
{
cout<<temp<<endl;
}
template<typename T>
A::A(T temp)
{
cout<<temp<<endl;
}
template <typename T>
void test(T temp)
{
cout<<temp<<endl;
}

void main()
{
test<int>(12); //普通模板函数
A aa(12); //请注意这一行
aa.A1<int>(15); //成员函数是模板函数

}
1062665477
推荐于2017-10-05 · TA获得超过553个赞
知道小有建树答主
回答量:166
采纳率:0%
帮助的人:231万
展开全部
D应该是错误的。B中的分号应该是笔误吧。

解释如下:
首先template<class Tl,class T2,class T3>T1 sum(T2,T3);这是一个函数声明。它是一个函数模板。函数模板具有参数推导功能,即它可以根据函数参数的类型推导出模板参数的类型。

A:sum<double,double,double>(dl,d2);显示指定T1、T2、T3的类型都是double。无需模板参数推导。无误。
B:sum<double,double>(d1,d2);显式指定模板参数T1、T2的类型是double,而T3类型可以根据函数参数d2推导出来为double。无误。

C:sum<double>(d1,d2);只显示指定T1的类型是double,而T2、T3的类型可以根据d1、d2的类型推导出来为double。无误。
D:sum(d1,d2);没有显示指定T1、T2、T3的类型,虽然T2、T3可以推导出来,但是T1无法进行推导,则在编译时刻发生错误。

故而D应该是错误的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yaojigang2002
2013-01-25
知道答主
回答量:5
采纳率:0%
帮助的人:5.6万
展开全部
除了D以外,都是错误的。模版函数的调用和普通函数的调用没什么区别。模版函数与普通函数不同的是模版函数的参数列表中的参数类型,是不确定的,只有被调用的时候才能确定,就比如问题中的例子,sum(d1,d2),该调用将模版函数的参数列表中的类型T2和T3实例化为double。普通函数参数列表的参数类型是在函数声明的时候就确定好的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Hongbo9t
2013-01-25 · TA获得超过150个赞
知道小有建树答主
回答量:313
采纳率:0%
帮助的人:149万
展开全部
B肯定不对,中间不能加分号。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式