A-A+
有如下函数模板定义: template
问题详情
有如下函数模板定义:
template<typenameT1,typenameT2,typenameT3>T2plus(T1t1,T3t3){returnt1+t3;}
则以下调用正确的是()。
A.plus(3,5L);
B.plus$amp;C.plus<int>(3,5L);
D.plus<int,double>(3,5L); 请帮忙给出正确答案和分析,谢谢!
参考答案
正确答案:D
D。【解析】C++中对函数模板的调用有时候只使用了函数实参,而没有使用模板实参,模板实参都被省略了,但模板实参的省略并不是必然的,而是有条件的:从模板函数实参表获得的信息有矛盾;需要莸得特定类型的返回值,而不管参数的类型如何;虚拟类型参数不出现在模板函数的形参中;函数模板含有常规形参。题中定义的函数模板中虚拟类型参数T2没有出现在模板数的形参列表中,所以在调用时不能省略,D选项的调用省略了T3,这是允许的。