函数重载的工作原理

how function overloading works

本文关键字:工作 重载 函数      更新时间:2023-10-16
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)。谁能解释为什么。

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

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

隐式转换是:

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

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

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

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

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