C++ 为什么调用方法1而不是方法2?
我不明白为什么在下面的代码段中调用方法1而不是方法2?方法2中的参数数量与调用完全匹配,那么为什么不调用方法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
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类型)必须向下转换,在这个过程中,一些数据可能会丢失