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

static_cast的一个有关问题

2013-08-09 
static_cast的一个问题#includeiostreamint main(){using std::coutusing std::cincout static_cas

static_cast的一个问题
#include<iostream>
int main()
{
using std::cout;
using std::cin;
cout << static_cast<float> (5/8);
cin.get();
return 0;
}

上面这段程序输出:0


#include<iostream>
int main()
{
using std::cout;
using std::cin;
cout << (float)5/8;
cin.get();
return 0;
}

上面这段程序输出:0.625

怎么static_cast转换不来啊

[解决办法]
static_cast<float>使用前已经把 (5/8)当成整型了
[解决办法]
(float)5/8,是先5为float,So 整个表达式为float
[解决办法]


cout << (static_cast<float> (5)/ static_cast<float>(8));

//这样才对吧! 你的代码 是已经是 int 型了 之后再float的,所以没有阿!

[解决办法]
cout << static_cast<float> (5)/8;
也是输出 0.625。
两个计算方式不一致,结果当然不同
一个先计算除法,后转换,一个先转换,后计算除法,结果相同是巧合,不同是正常结果。



[解决办法]
引用:
#include<iostream>
int main()
{
using std::cout;
using std::cin;
//cout << static_cast<float> (5/8);
        cout << static_cast<float>(5.0 / 8);
cin.get();
return 0;
}

上面这段程序输出:0


#include<iostream>
int main()
{
using std::cout;
using std::cin;
cout << (float)5/8;
cin.get();
return 0;
}

上面这段程序输出:0.625

怎么static_cast转换不来啊

5/8 输出就是0,所以转为float还是0.整数相除

[解决办法]
static_cast<float> (5/8) ;// 相当于 (float)(5/8)
(float)5/8 ;              //相当于 ((float)5)/8 


[解决办法]
5/8 == 0
[解决办法]
cout << static_cast<float> (5)/8;

热点排行