2016-03-15 44 views
3
#include <iostream> 

using namespace std; 

int main(void) 
{ 
    float haha[2]; 
    float (&ptr)[2] = haha; 
    ptr[0] = 0.54; 
    ptr[1] = 0.65; 

    cout << haha[0] << '\n' << haha[1]; 
    system("pause"); 
    return 0; 
} 

我使用底漆C++和在這裏我的代碼我得到警告說Warning C4305 '=': truncation from 'double' to 'float' Array兩個ptr[0]ptr[1]出於某種原因,但我沒有看到雙打的任何地方,但是當我修改代碼以從double到float的截斷?

目前正在學習複雜的數組聲明
ptr[0] = (float)0.54; 
ptr[1] = (float)0.65; 

我似乎沒有任何警告任何人都可以解釋爲什麼?先謝謝你!

+8

如果你做了'0.54f',那麼'0.54'將被認爲是double類型,那麼它將是一個浮點數 – EdChum

回答

6

即時值或文字,如3,3.14"Hello"在C++中有類型。 3.14的類型爲double,它大於float並導致此警告。對於「更大」,我的意思是它可以保存如果轉換後不符合float的值,此時語言可能會以意想不到的方式運行。

您可以使用後綴來指定您想要的類型,3.14F將浮動。

同樣,對於整數你有3U無符號和3L長,甚至那些組合。 C++ 11也具有用戶定義的後綴。

+1

請不要對後綴('l')使用小寫字母ell;它很容易誤讀'1'。改用'L';它意味着相同,並且明確地不是'l'或'1'。而且因爲'L'需要大寫,所以我建議使用大寫字母來表示其他後綴。 –

+0

取決於字體,但我一般同意。 – ftynse

4

從標準2.14.4,Floating literals

類型浮動字面的是雙除非由後綴明確指定。後綴fF指定爲浮點型,後綴爲lL指定爲long double。

然後,除非明確指定後綴,否則浮動文字總是雙倍。鑄造浮動也可能工作(小心數字適合雙倍的大小,而不是浮動的),但你應該使用鑄造時,它是你唯一的選擇(不是這種情況下)。在你的代碼中只需使用後綴(0.54f)即可。