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