问题 单项选择题

有如下函数模板定义: template<typename T1,int a2,int a3> T1 sum(T1 a1) {return(a1+a2+a3); } 则以下调用中正确的是

A.sum<int,4,3>(5);

B.sum<4,3>(5);

C.sum<int,int,int>(5);

D.sum(5);

答案

参考答案:A

解析: 本题考核函数模板的使用。C++中对函数模板的调用有时候只使用了函数实参,而没有使用模板实参,模板实参都被省略了,但模板实参的省略并不是必然的,而是有条件。模板实参不能省略的情况有:从模板函数实参表获得的信息有矛盾;需要获得特定类型的返回值,而不管参数的类型如何;虚拟类型参数没有出现在模板函数的形参中;函数模板含有常规形参。题中定义的函数模板中含有常规形参,常规形参的信息无法从模板函数的实参表中获得,因此在调用时必须显式地给出对应于常规参数的模板实参。注意,sum的第一个模板实参的信息可以从模板函数的实参表中获得,但由于它位于不可省略实参的前面,因此不能省略,所以只有A选项的调用格式是正确的。

问答题 简答题
问答题 简答题