首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

【送分】底下程序的运行结果

2013-04-21 
【送分】下面程序的运行结果一道考试题,我不能理解下面的执行结果为什么是40:15#include iostream.htempla

【送分】下面程序的运行结果
一道考试题,我不能理解下面的执行结果为什么是
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;
}

热点排行