2012-09-20 52 views
4
int add(int a,int b) 
{ 
    cout<<"1"<<endl; 
    return a+b; 
} 
int add(int a,char c) 
{ 
     cout<<"2"<<endl; 
     return a+c; 
} 
int main() 
{ 
      cout<<add(10,20)<<endl; //1 
      cout<<add(10,'a')<<endl; //2 
      cout<<add('a','b')<<endl; //3 
} 

在上面的代码中第一个函数调用函数add(int,int),第二个函数调用函数add(int,char)。 第三个函数调用应该导致错误,但它调用函数add(int,char)。 任何人都可以解释为什么。函数过载如何工作

+0

C++是弱类型的。编译器将尽最大努力使代码无误地工作,因此在这种情况下,它会自动将char输入转换为int。 – Kapura

+0

@卡普拉这不是什么弱类型的手段。 – asawyer

回答

0

最匹配的是一个与int和焦炭。由于char可以隐式转换为int,它仍然可以工作。

int a = 'a'; // Returns the ascii value for 'a'. 
+0

我想配音它的“数值”,因为ASCII不是给定的。 – Xeo

1

如果一个功能转换的所有参数至少还有那些其他的功能和一些参数转换好,该功能拍摄。

如果不是所有参数至少与另一个函数的转换参数一样好,并且后一个函数的所有参数至少与前一个函数的参数转换得一样好,那么在正常情况下存在不确定性普通的功能。