我是一个有用的助手,可以进行文本翻译。
输出结果为:
我对隐式类型转换感到有些困惑。考虑以下程序:
float x = 4.23423451;
double y = 4.23423451;
float z = 101.9876;
float res1 = x * z;
float res2 = y * z;
std::cout << "res1 & res2 " << res1 << " & " << res2 << std::endl;
std::cout << "equality " << (res1 == res2) << std::endl;
输出结果为:
res1 & res2 431.839 & 431.839
equality 1
我的问题是:“对于任何x、y和z(x = y)的值,以及任何编译器,等式是否始终成立?”
在以下代码中:
res2 = y * z;
变量“y”会被强制转换为浮点型还是变量“z”会被强制转换为双精度型?
z
的中间表达式将会被扩展为double
,因此y * z
将成为一个double
表达式。然后进行隐式缩小转换以将其转换为float
并存储在res2
中。对于res1
也是同样的情况。 - obatakures1
不一定等同于res2
——这高度取决于环境中float
和double
的精度。这两个字面量可能甚至不相等——4.23423451f
不必等同于4.23423451
。 - obataku