为什么调用方法 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 并且在这个过程中一些数据可能会丢失。
我很困惑为什么下面的代码段调用方法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 最适合提供的参数(长),第二个参数是默认参数意味着当你调用
时我的值为 2addOraclePolygonFeatures(long l, int i=2)
一个参数的函数。如果您使用两个参数调用 addOraclePolygonFeatures,i 的值将被覆盖。
您正在使用单个 long
调用函数。您有两个候选人:一个接受 int
,另一个接受 long
和一个可选的 int
。采用单个 int
的不是最佳匹配,因为如果传入的数字太大而不适合 int
.
l 有一个类型 long 这就是调用 function 1 的原因。并且其他参数将具有默认值以匹配函数1。 函数 2 的参数类型为 int 调用函数的参数(viz 类型为 long here)将不得不 downcast 并且在这个过程中一些数据可能会丢失。