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

admin2013-02-27  17

问题 有如下函数模板定义:    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选项的调用格式是正确的。
转载请注明原文地址:https://kaotiyun.com/show/iaVp777K
0

最新回复(0)