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

时间:2015-11-11 05:50:42

标签: c++ overloading

我很困惑为什么为下面的代码段调用方法1而不是方法2?方法2中的参数数量与调用完全匹配,那么为什么不调用method2?

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);
}

4 个答案:

答案 0 :(得分:3)

调用方法1是因为它完全匹配;方法2需要向下倾斜。

答案 1 :(得分:2)

l 类型,这就是调用 function 1 的原因。其他参数将具有默认值以与函数1 匹配。 并且 function 2 具有参数类型 int ,其调用函数的参数( viz类型为long )必须为垂头丧气并且在该过程中一些数据可能会丢失。

答案 2 :(得分:1)

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

addOraclePolygonFeatures(long l, int  i=2)

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

答案 3 :(得分:0)

您正在使用单个long调用函数。您有两个候选人:一个考虑int,另一个考虑longint。单个int的匹配不是最佳匹配,因为如果传入的数字太大而无法容纳int,则可能会丢失数据。