我写了这样的代码:
#include<iostream>
using namespace std;
int main()
{
cout<<static_cast<float>(5/9)*9;
cout<<static_cast<float>(5)/9*9;
return 0;
}
预期产量:55
原始输出:05
为什么第一个静态强制转换语句变为0?
最佳答案
在这个子表达式中
(5/9)
此声明
cout<<static_cast<float>(5/9)*9;
使用整数运算。子表达式的结果为0。此结果转换为float类型。
static_cast<float>( 0 )
也就是说,在对其进行评估之后,将强制转换应用于括号中的主子表达式。
在第二个陈述中
cout<<static_cast<float>(5)/9*9;
实际上等于
cout<< 5.0f/9*9;
在子表达式中
static_cast<float>(5)/9
还是一样
5.0f / 9
使用带浮点数的算术,结果不等于0。
关于c++ - 静态强制转换中的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61782729/