c++,为何模板类才能使用默认模板参数,而模板函数却不能?求教。

 我来答
维她柠檬茶o3o
2014-07-20 · 超过14用户采纳过TA的回答
知道答主
回答量:30
采纳率:0%
帮助的人:25.3万
展开全部
你给fun函数传个int,那个int多余的啊,因为没有typename匹配它
追问
只是给定一个默认模板参数啊,好像模板类可以这样,但是模板函数却不可以,为啥?
追答
模板类是因为它的数据类型未被实例化,像list,它的数据可以是int,double等等,所以需要你在使用之前给它传一个dataType。而你的fun不需要. 你传两个参数x, y实际上就是给T1T2实例化.系统会根据x,y的类型分别为T1,T2实例化
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6f22f01f8
2019-12-18
知道答主
回答量:2
采纳率:0%
帮助的人:1415
展开全部
这是因为函数是根据调用时的参数类型反推模板参数类型。而模板类模板参数类型是你申明对象时给出的。好拗口啊!还是拿你的例子来举例来说明好了:
我们定义一个模板函数:

template <typename T1, typename T2>func(T1 p1, T2 p2){...};
然后在某一个地方调用:
int x; short y;
func(x, y);//编译器编译这里的代码时会根据实际参数x, y的类型得出T1是int,T2是short。如果你在函数板中指定typename T2 = int也没啥用,而且甚至和推导出的short矛盾。

而模板类就不一样:
template <typename T1, typename T2=int> class CName{
CName(T1 x, T2 y){...};//类似函数的构造函数
...
};
CName<int, short> obj(x, y);//这里T2已由<int, short>给出了,它规定T1必须是int类型,T2必须是short类型,而不是由x, y来反推T1, T2。如果x, y类型不能隐式转换成(int)x, (short)y则与<int, short>申明不符会出编译错误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式