1.引用作为重载条件
#include<iostream>
using namespace std;
//1.引用作为重载的条件
//int 和 const int 类型不同,所以可以作用重载条件
void fn(int &a) //int &a=10;不合法
//10放在了常量区,而引用要么在栈区,要么在堆区
{
cout << "fn(int &a)调用" << endl;
}
void fn(const int& a) {//这种const int &a=10,相当于创建了一个临时数据,让
//让a指向这个临时数据
cout << "fn(const int &a)调用" << endl;
}
int main() {
int a = 10;
fn(a);//这种方式调用的是第一个fn
fn(10);//这种方式调用的是第二个fn
system("pause");
return 0;
}
2.函数重载遇见函数默认参数。
#include<iostream>
using namespace std;
//2.函数重载碰到默认参数
//这种时候两个函数满足重载的所有条件,
void fn(int a,int b=10) {
cout << "fn(int a) 的调用" << endl;
}
void fn(int a) {
cout << "fn(int a) 的调用" << endl;
}
int main() {
fn(10);//调用的时候编译器报错了。因为编译器发现调用这个东西
//好像上面两个都符合条件,编译器傻了,不知道到底编译那个,所以报错。
//专业描述:当函数重载碰到默认参数,会出现二义性,报错,所以要
//尽量避免这种操作。
system("pause");
return 0;
}