让我们来看看这个节目:
#include <iostream>
...
int main()
{
double koza = ( 1+2, 54 + 6, foo(), bar(), (double) 8/9 );
std::cout << koza << std::endl;
return 0;
}
输出为8/9,即0.888889
。如果我改为使用static_cast<double> (8/9)
或double(8/9)
,那么首先会计算8/9,这将被解释为integer
(所以8/9等于0),然后我会进行投射在double
上,它会给我0
作为输出。
但(double) 8/9
究竟是如何运作的?它是否会将8
和9
同时转换为double,然后计算出来?或者它将(double)
之后的所有内容视为double
而不是默认int
?或者以其他方式?
在类中,当我们处于这种情况时,通过将.0
添加到整数,将数字写为浮点数,例如:
double x = 8.0
。
但它会如何在这里起作用?或者我应该问:这究竟是如何运作的?这三个表达式之间有什么区别吗?
a)double x = 8.0 / 9;
b)double x = 8 / 9.0;
c)double x = 8.0 / 9.0;
答案 0 :(得分:4)
(double)8/9
是((double)8)/9
- (double)
紧紧绑定。
当您对double
和int
/
进行操作时,int
会隐式转换为double
。
适用的其他二元运算符(大多数?所有?)也是如此。