关于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);
求大神解释一下 展开
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);
求大神解释一下 展开
4个回答
展开全部
所谓函数模板实际上是建立一个通用函数,其涵涵素类型额形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就称为函数模板。
调用代码:
#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); //成员函数是模板函数
}
调用代码:
#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); //成员函数是模板函数
}
展开全部
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应该是错误的。
解释如下:
首先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应该是错误的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
除了D以外,都是错误的。模版函数的调用和普通函数的调用没什么区别。模版函数与普通函数不同的是模版函数的参数列表中的参数类型,是不确定的,只有被调用的时候才能确定,就比如问题中的例子,sum(d1,d2),该调用将模版函数的参数列表中的类型T2和T3实例化为double。普通函数参数列表的参数类型是在函数声明的时候就确定好的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
B肯定不对,中间不能加分号。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询