- 此问题在此处已有答案**:
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)'的调用不明确"
这是可以理解的
有人能解释一下我的行为吗?
1条答案
按热度按时间w8f9ii691#
在这种情况下:
第二个参数是
int
,第一个参数是double
并且可转换为int
,因此调用第一个重载(关于第二个重载,没有一个参数匹配其参数,因此是次匹配)。另一方面,在这种情况下:
第一个参数是
float
,第二个参数是int
。两个重载都与一个参数匹配,并且要求转换另一个参数,因此出现多义性错误。