#include <iostream>
using namespace std;
int func(int a,int b,int c = 0)
{
return a*b*c;
}
int func(int a,int b)
{
return a+b;
}
int main()
{
cout << "func(1,2): " << func(1,2) << endl;
return 0;
}
报错:两个函数都可以执行,但不知道调用哪一个,编译不通过!
总结:在做产品时,如果使用“默认参数”就不要使用“函数重载”。二选一,不要同时使用,防止二义性。
编译器调用重载函数的准则:
1.将所有同名函数作为候选者;
2.尝试寻找可行的候选者;
(1)精确匹配实参类型
(2)通过默认参数能够匹配实参类型
(3)通过默认类型转换匹配实参
匹配失败:
(1)最终寻找可行的候选函数不唯一,出现二义性,编译失败;
(2)无法匹配所有候选者,函数未定义,编译失败。