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)。任何人都可以解释为什么。

4

3 回答 3

5

有隐式转换 char 到 int。更多在这里:

http://www.petebecker.com/js/js200004.html

隐式转换是:

http://en.cppreference.com/w/cpp/language/implicit_cast

于 2012-09-20T17:42:53.443 回答
1

如果一个函数的所有参数的转换至少与另一个函数的参数一样,并且某些参数转换得更好,则采用该函数。

如果不是所有参数的转换至少和另一个函数的参数一样好,并且后一个函数的所有参数的转换至少和前一个函数的参数一样,那么在普通函数的正常情况下就会产生歧义。

于 2012-09-20T17:48:42.510 回答
0

最接近的匹配是具有 int 和 char 的匹配。由于 char 可以隐式转换为 int 它仍然有效。

int a = 'a'; // Returns the ascii value for 'a'.
于 2012-09-20T17:45:37.887 回答