我正在尝试在Mac上使用Clang的C ++ 11中学习。
如书中所述,当浮点类型在算术中遇到int或小写时,后者将转换为float。在以下情况下确实如此:
cout << 9.0 / 5 << endl;
结果产生1.8000
,但是当我尝试使用后缀来确保常量的类型时,例如:
cout << 9.0f / 5i << endl;
结果产生1
。我想知道为什么?其背后是否有不同的规则或机制?
使用i
作为后缀是一个扩展其指示的假想恒定,而不是也由支撑的整数gcc
。如果没有警告,启用clang
将仅解释5i
为复数。在打开警告(特别是-Wconversion)的情况下,它会发出以下警告:
warning: imaginary constants are a GNU extension [-Wgnu-imaginary-constant]
std::cout << 9.0f / 5i << std::endl;
^
warning: implicit conversion discards imaginary component: '_Complex float' to 'bool' [-Wconversion]
std::cout << 9.0f / 5i << std::endl;
~~~ ~~~~~^~~~
因此,看起来没有重载,_Complex
因此结果被转换为bool。我们可以使用以下示例更清楚地看到这一点:
float f = (9.0f / 5 + 0i) ;
std::cout << f << std::endl ;
输出1.8
。
如果只需要一个int文字,则不需要后缀,其他整数后缀分别u, l, ul, ll, ull
用于unsigned, long, unsigned long, long long and unsigned long long
。
因此,在您的情况下:
9.0f / 5
会是你想要什么,如果你想确保9.0
被解释为浮动否则会被解释为一个双。
5
也将转换为浮点数,因为/
运算符将对其操作数执行常规的算术转换。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句