第1个回答 推荐于2017-10-05
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应该是错误的。本回答被提问者采纳