分析下面语句的缺点:
template<typename T1,typename T2>
inline T1 max(T1 const& a,T2 const & b)
{
return a<b?b:a;
}
......
max(4,4.2);
以上语句是给max传递两个不同类型的好方法。
缺点一:对于返回类型,如果使用的是其中的一个参数类型,那么另一个实参可能要转型为返回类型,而不会在意代码的用途,返回值取决于调用实参的顺序。
缺点二:把第二个参数转型为返回类型的过程将会创建一个新的局部临时对象,这导致了不能通过引用来返回结果。
修改方式一:显示指定所有参数实例
template<typename T1,typename T2,typename RT>
inline RT max(T1 const& a,T2 const & b)
{
return a<b?b:a;
}
.............
max<int ,double,double>(4,4.2); //程序正确,但调用会很麻烦
修改方式二:显示指定第一个实参,让演绎过程推导出其余的实参
template<typename RT, typename T1,typename T2>
inline RT max(T1 const& a,T2 const & b)
{
return a<b?b:a;
}
.............
max<double>(4,4.2);