2016-05-27 82 views
1

我的程序有兩個打印函數:一個用於int,另一個用於float在C++中函數重載的困惑

void print(float a){ 
    cout << "float:" << a << endl; 
} 

void print(int a){ 
    cout << "integer:" << a << endl; 
} 

每當我打電話print(10)print(0)一個爲int數據類型被調用。但是,當我嘗試撥打print(3.5)時,會出現編譯錯誤。爲什麼這樣?

PS當我只有一個print函數void print(float a)然後print(3.5)工作正常。

+3

'3.5'是一個'double'。嘗試'打印(3.5f)'。 – songyuanyao

+0

3.5'也不是'漂浮'嗎? –

+0

@MairaMuneer不,這是一個'雙';) – Quentin

回答

5

請注意3.5double,而不是float。它可以隱式轉換爲floatint,調用變得模糊(floatint)。

請參閱floating point literal

後綴,如果存在,是一個fFl,或L。後綴決定了 型的浮點文字的:

(no suffix) defines double 
    f F defines float 
    l L defines long double 

所以,你可以通過print(3.5f);調用它來避免歧義。

順便說一句:double可以隱式轉換爲float,這就是爲什麼如果你只有一個函數,那麼它運作良好。