c++ 重载在不同返回类型的函数中如何工作?[duplicate]

oaxa6hgo  于 2023-01-22  发布在  其他
关注(0)|答案(1)|浏览(133)
    • 此问题在此处已有答案**:

Why is an overloaded function with two arguments of type double called when passing a long long?(2个答案)
conversion precedence in c++(2个答案)
13小时前关闭。

#include <iostream>

using namespace std;
class Sample{
public:
    
    int sum(int a, int b)
    {
        cout << "int sum";
        return a+b;
    }
    
    float sum(float a, float b)
    {
        cout << "float sum" ;
        return a+b;
    }
    
};
int main()
{
    cout<<"Hello World";
    Sample s1;
    s1.sum(5.5, 5);

    return 0;
}

在上面的代码中,当sum函数被调用时,总是运行带int参数的sum函数。我不明白为什么,而且它甚至没有抛出任何错误。
但是当我把函数调用改为如下形式时:s1.sum(5.5f, 5),这会导致错误:
"错误:重载'sum(float,int)'的调用不明确"
这是可以理解的
有人能解释一下我的行为吗?

w8f9ii69

w8f9ii691#

在这种情况下:

s1.sum(5.5, 5);

第二个参数是int,第一个参数是double并且可转换为int,因此调用第一个重载(关于第二个重载,没有一个参数匹配其参数,因此是次匹配)。
另一方面,在这种情况下:

s1.sum(5.5f, 5)

第一个参数是float,第二个参数是int。两个重载都与一个参数匹配,并且要求转换另一个参数,因此出现多义性错误。

相关问题