c ++中函数重载的混淆

Mai*_*eer 1 c++ floating-point overloading function

我的程序有两个打印功能:一个用于int,一个用于float.

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

void print(int a){
    cout << "integer:" << a << endl;
}
Run Code Online (Sandbox Code Playgroud)

每当我调用print(10)或调用数据类型的print(0)那个时int.但是当我尝试调用时print(3.5),它会产生编译错误.为什么会这样?

PS当我只有一个print功能void print(float a)然后print(3.5)工作正常.

son*_*yao 5

注意3.5是a double,而不是a float.并且它可以转换为两者float并且int隐式地,调用变得模糊(floatwith int).

请参阅浮点文字.

后缀,如果存在,是一个f,F,l,或L.后缀确定浮点文字的类型:

    (no suffix) defines double
    f F defines float
    l L defines long double
Run Code Online (Sandbox Code Playgroud)

因此,您可以通过调用它print(3.5f);来避免歧义.

BTW:double可以float隐式转换,这就是为什么如果你只有一个函数那么它运行良好.