模板中的类型转换问题...

来源:百度知道 编辑:UC知道 时间:2024/06/06 15:31:09
#include<iostream.h>
template<class T>
T max(T x,T y) {return(x>y)?(x):y;}

void main()
{
int x=16;
int y=18;
long l=20;

double a=10.8,b=12.5;
cout<<max(a,b)<<endl;
cout<<max(x,y)<<endl;
cout<<max<double>(a,l)<<endl;
}

我不明白cout<<max<double>(a,l)<<endl;中的<double>存在干嘛? 有double 输出的却是20,为甚麽?
可是20不是double型呀?

你的代码能编译通过吗?max重载了,调用会出问题的吧

<double>存在 是为了进行显示的类型转换,否则函数模板不知道T是哪个类型

因为a和l是不同类型,而模板实例化只能按照一种类型实例化,所以用double表示函数实例化为double max(double x, double y)
返回20就好理解了吧,l被向上转化为double类型,20 〉10,当然返回20