2016-05-27 7 views
1

私のプログラムには、intfloatの2つの印刷機能があります。私はprint(10)またはintデータ型の1が呼び出されprint(0)を呼び出すたび関数のオーバーロードがC++で混乱する

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

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

。しかし、print(3.5)に電話しようとすると、コンパイルエラーが発生します。それはなぜそうですか?

PS私が唯一持っているときprint機能void print(float a)次にprint(3.5)はうまくいきます。

+3

「3.5」は「ダブル」です。 'print(3.5f)'を試してください。 – songyuanyao

+0

'3.5'も' float'ではありませんか? –

+0

@MairaMuneerいいえ、それは 'double';) – Quentin

答えて

5

3.5doubleであり、floatではありません。 floatintの両方に暗黙的に変換すると、呼び出しが曖昧になります(floatint)。

floating point literalを参照してください。

サフィックスは、存在する場合、fの一つ、Fl、又はLです。接尾辞は、浮動小数点リテラルの タイプを決定します。

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

ですから、あいまいさを避けるためにprint(3.5f);ことによってそれを呼び出すことができます。

BTW:doubleは暗黙のうちにfloatに変換することができます。そのため、機能が1つだけの場合はうまく機能します。