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

Why is method 1 called instead of method 2?

我很困惑为什么下面的代码段调用方法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);
}

调用方法一是因为它是精确匹配;方法 2 需要向下转换。

因为方法 2 最适合提供的参数(长),第二个参数是默认参数意味着当你调用

时我的值为 2
addOraclePolygonFeatures(long l, int  i=2)

一个参数的函数。如果您使用两个参数调用 addOraclePolygonFeatures,i 的值将被覆盖。

您正在使用单个 long 调用函数。您有两个候选人:一个接受 int,另一个接受 long 和一个可选的 int。采用单个 int 的不是最佳匹配,因为如果传入的数字太大而不适合 int.

,它可能会丢失数据

l 有一个类型 long 这就是调用 function 1 的原因。并且其他参数将具有默认值以匹配函数1函数 2 的参数类型为 int 调用函数的参数(viz 类型为 long here)将不得不 downcast 并且在这个过程中一些数据可能会丢失。