C++ 为什么调用方法1而不是方法2?

C++ 为什么调用方法1而不是方法2?,c++,overloading,C++,Overloading,我不明白为什么在下面的代码段中调用方法1而不是方法2?方法2中的参数数量与调用完全匹配,那么为什么不调用方法2呢 bool addOraclePolygonFeatures(long l, int i=2) { //method 1 cout<<"method1\n"; return true; } // Function 2 bool addOraclePolygonFeatures(int i) { //method 2 cout<<"me

我不明白为什么在下面的代码段中调用方法1而不是方法2?方法2中的参数数量与调用完全匹配,那么为什么不调用方法2呢

bool addOraclePolygonFeatures(long l, int  i=2)
{
  //method 1

  cout<<"method1\n";
  return true;
}

// Function 2
bool addOraclePolygonFeatures(int i)
{
  //method 2

  cout<<"method2\n";
  return true;
}

int main()
{
  long l=4;
  int  i=3;
  addOraclePolygonFeatures(l);
}
bool addOraclePolygonFeatures(长l,整数i=2)
{
//方法1

cout调用方法1是因为它是完全匹配的;方法2需要向下转换。

因为方法2是所提供参数(long)的最佳匹配,第二个参数是默认参数,这意味着调用时我的值为2

addOraclePolygonFeatures(long l, int  i=2)

带有一个参数的函数。如果您使用两个参数调用addOraclePolygonFeatures,i的值将被重写。

您使用单个
调用函数。您有两个候选者:一个接受
int
,另一个接受
和可选的
int
。一个接受s单个
int
不是最佳匹配,因为如果传入的数字太大,无法放入
int

l的类型为long,这就是调用函数1的原因。其他参数将具有与函数1匹配的默认值。 函数2的参数类型为int,调用函数的参数(即这里的long类型)必须向下转换,在这个过程中,一些数据可能会丢失