2013-07-26 60 views
-1

程序沒有顯示錯誤並將0.05f轉換爲0的原因是什麼?以整數返回浮點數返回類型

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

存在一個隱式'float'到'int'的轉換,所以最好是一個警告。您是否在編譯時啓用了警告? – Angew

+0

請不要將[c]標籤用於C++問題。 – geoffspear

+0

你會期望程序返回什麼? –

回答

2

你是隱式類型轉換floatint這是按照C++標準 - 但我相信如果你打開你的編譯器警告,你會得到一個警告。

當我做這在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++標準具有將floatint轉換規則,所以這是完全正常的做到這一點。它應該編譯,但你可能會收到警告。

第4.9節的n3337版本的C++ 11標準點1:

浮點類型的prvalue可以轉換爲一個 整數類型的prvalue。轉換截斷;即丟棄小數部分 。該行爲是不確定的,如果被截斷的價值不能 的目標類型

-1

表示如果使用

float main() 

,而不是

int main() 

它會奏效。

+0

用戶詢問它爲什麼被轉換,並且沒有錯誤被拋出,而不是如何返回浮點值。 –