程序没有显示错误并将0.05f转换为0的原因是什么?
int main()
{
int a,b;
cin>>a>>b;
cout<<a+b;
return 0.05f;
}
程序没有显示错误并将0.05f转换为0的原因是什么?
int main()
{
int a,b;
cin>>a>>b;
cout<<a+b;
return 0.05f;
}
您正在按照 c++ 标准隐式类型转换float
-int
但我相信如果您打开编译器警告,您会收到警告。
当我在 VS2012 中执行此操作时,我收到警告:
Warning 1 warning C4244: 'return' : conversion from 'float' to 'int', possible loss of data
你会得到一个警告(可能)但不是错误,因为隐式转换是合法的:
warning: implicit conversion from 'float' to 'int' changes value from 0.050000001 to 0 [-Wliteral-conversion]
float
C++ 标准有转换为的转换规则int
,所以这样做完全没问题。它应该可以编译,但您可能会收到警告。
C++11 标准的 n3337 版本第 4.9 节第 1 点:
浮点类型的纯右值可以转换为整数类型的纯右值。转换截断;也就是说,小数部分被丢弃。如果截断的值不能在目标类型中表示,则行为未定义