1

程序没有显示错误并将0.05f转换为0的原因是什么?

int main()
{
  int a,b;
  cin>>a>>b;
  cout<<a+b;
  return 0.05f;
}
4

3 回答 3

3

您正在按照 c++ 标准隐式类型转换float-int但我相信如果您打开编译器警告,您会收到警告。

当我在 VS2012 中执行此操作时,我收到警告:

Warning 1   warning C4244: 'return' : conversion from 'float' to 'int', possible loss of data   
于 2013-07-26T13:51:55.323 回答
2

你会得到一个警告(可能)但不是错误,因为隐式转换是合法的:

warning: implicit conversion from 'float' to 'int' changes value from 0.050000001 to 0 [-Wliteral-conversion]
于 2013-07-26T13:50:26.530 回答
0

floatC++ 标准有转换为的转换规则int,所以这样做完全没问题。它应该可以编译,但您可能会收到警告。

C++11 标准的 n3337 版本第 4.9 节第 1 点:

浮点类型的纯右值可以转换为整数类型的纯右值。转换截断;也就是说,小数部分被丢弃。如果截断的值不能在目标类型中表示,则行为未定义

于 2013-07-26T13:54:50.430 回答