函数重载的工作原理
how function overloading works
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'.
相关文章:
- C++编程:运算符重载中的引用如何工作?
- C++,()运算符重载,它的工作是什么
- 为什么重载运算符"="动态数组的类上无法正常工作?C++
- 如何使'='重载在'='的另一边工作
- C++ 继承:基类中重载 operator+ 的 2 次在派生类中无法正常工作
- ostream_iterator运算符=在pair<int,int>上失败,但在包装器类上工作。我不能为成对<>重载运算符<<吗?
- 当传递NULL作为参数时,函数重载是如何工作的
- c++ 中的函数重载如何在没有钻石继承的情况下工作?
- 工作函数重载如何使用可变参数解析?
- 重载按位 OR('|'),用于链接操作无法按预期工作
- 此模板类型推断和重载解析如何工作
- 当其中一个函数未编译时,函数重载查找如何工作?
- 运算符重载在 CPP 中的排序中如何工作?
- 我的重载后增量方法无法按预期工作。为什么?
- 运算符重载如何工作,为什么在我的情况下不起作用?
- 运算符重载 =, *=.如何使这项工作
- 在存在新的初始值设定项序列的情况下,运算符重载解析如何工作
- 重载输入/输出运算符,为什么它以这种方式工作而不是以另一种方式工作
- C++ 重载 ->运算符,它是如何工作的?
- 函数重载的工作原理