2016-05-27 84 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,这就是为什么如果你只有一个函数,那么它运作良好。