В чем причина, почему программа не показывает ошибку и конвертирует 0.05f в 0?Возвращаемый float в Integer return type
int main()
{
int a,b;
cin>>a>>b;
cout<<a+b;
return 0.05f;
}
В чем причина, почему программа не показывает ошибку и конвертирует 0.05f в 0?Возвращаемый float в Integer return type
int main()
{
int a,b;
cin>>a>>b;
cout<<a+b;
return 0.05f;
}
вы неявно типажей 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]
Стандарта C++ имеет правило преобразования для преобразования float
в int
, так что это прекрасно, чтобы сделать это. Он должен компилироваться, но вы можете получить предупреждения.
Раздел 4.9, пункт 1 n3337 версии стандарта C++ 11:
prvalue типа с плавающей точкой может быть преобразован в prvalue от типа целого числа. Преобразование усекает; то есть дробная часть отбрасывается. Поведение не определено, если усеченного значение не может быть представлена в типе назначения
Если вы используете
float main()
вместо
int main()
он будет работать.
Пользователь спрашивал, почему он был преобразован, и не было ошибки, а не как вернуть значение float. –
Существует неявное преобразование 'float' в' int', поэтому в лучшем случае это будет предупреждение. Вы компилируете с включенными предупреждениями? – Angew
Пожалуйста, не используйте тег [c] для вопросов C++. – geoffspear
Что вы ожидали от программы? –