【送分】下面程序的运行结果
一道考试题,我不能理解下面的执行结果为什么是
40:15
#include <iostream.h>
template<class T>
T func(T x,T y)
{
if(sizeof(T)==8)// sizeof(T)什么意思?能给个参考吗?
return x+y;
else
return x*y;
}
void main()
{
cout <<func(8,5)<<":"<<func(5.0,10.0)<<endl;
int d;cin>>d;
}
[解决办法]
func(8,5)
这8 5为int型 sizeof为4
所以执行x*y
后面是浮点型 sizeof为8
所以执行x+y
[解决办法]
sizeof是判断某个对象的大小。
对于func(8,5),模版中的T就是int, func(5.0,10.0)就是double
32位机器上,sizeof(int) == 4, sizeof(double) == 8
[解决办法]
sizeof(T)获取参数类型的大小啊,func(8,5),模板函数演化为 int func(int x,int y),int的大小为4,自然就执行返回x*y,结果就是40。func(5.0,10.0),模板函数演化为 double func(double x,double y),double 的大小为8,就执行x+y,结果为15.0啦
[解决办法]
sizeof(T)
转换成了sizeof(int)
sizeof(float)
[解决办法]
#include <iostream.h>
template<class T>
T func(T x,T y)
{
// sizeof(T)就是类型T占多少个字节
//对于func(8,5), T被实例化为int,所以sizeof(int)=4, 返回8*5=40
//对于func(5.0,10.0), T被实例化为double, 所以sizeof(double)=8, 返回5.0+10.0=15
if(sizeof(T)==8)
return x+y;
else
return x*y;
}
void main()
{
cout <<func(8,5)<<":"<<func(5.0,10.0)<<endl;
int d;cin>>d;
}