2013-07-26 2 views
-1

В чем причина, почему программа не показывает ошибку и конвертирует 0.05f в 0?Возвращаемый float в Integer return type

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

Существует неявное преобразование 'float' в' int', поэтому в лучшем случае это будет предупреждение. Вы компилируете с включенными предупреждениями? – Angew

+0

Пожалуйста, не используйте тег [c] для вопросов C++. – geoffspear

+0

Что вы ожидали от программы? –

ответ

2

вы неявно типажей float к int, что это в соответствии с стандартом ++ - но я верьте, если вы включите предупреждения компилятора, вы получите предупреждение для этого.

Когда я сделать это в VS2012, я получаю предупреждение:

Warning 1 warning C4244: 'return' : conversion from 'float' to 'int', possible loss of data 
+0

Я использую TurboC++, и компилятор даже не показывает никаких предупреждений. – devKeshav

+0

@devKeshav: Смотрите мой ответ еще раз. Я обновил его. –

+0

Но есть ли какие-либо проблемы в TurboC++, потому что он даже не показывал предупреждения. – devKeshav

2

Вы бы получить предупреждение (возможно), но не об ошибке, потому что неявное преобразование является законным:

warning: implicit conversion from 'float' to 'int' changes value from 0.050000001 to 0 [-Wliteral-conversion] 
0

Стандарта C++ имеет правило преобразования для преобразования float в int, так что это прекрасно, чтобы сделать это. Он должен компилироваться, но вы можете получить предупреждения.

Раздел 4.9, пункт 1 n3337 версии стандарта C++ 11:

prvalue типа с плавающей точкой может быть преобразован в prvalue от типа целого числа. Преобразование усекает; то есть дробная часть отбрасывается. Поведение не определено, если усеченного значение не может быть представлена ​​в типе назначения

-1

Если вы используете

float main() 

вместо

int main() 

он будет работать.

+0

Пользователь спрашивал, почему он был преобразован, и не было ошибки, а не как вернуть значение float. –