1、C++支持函数重载的原理——名字修饰
【X.cpp】——>预处理:头文件展开/宏替换/去掉注释/条件编译——>【X.i】——>编译:检查语法,生成汇编代码(指令级代码)——>【X.s】——>汇编:将汇编代码转成二进制机器码——>【X.o】——>链接:合并链接,生成可执行程序——>【X.exe】
要实现函数重载,在链接的时候,生成的符号表会引入函数名修饰规则,不同的语言/不同的系统/不同的编译器有不同的函数名修饰规则。有了函数名修饰规则以后,被重载的函数的函数名就不是一样的了。(本质上是把参数带到名字里去了,但是是一种简化的带)
2、引用
引用不是定义一个新的变量,而是对已有的变量取别名。
int a = 0;
int& b = a; //此处b是a的别名,a和b用的同一块空间,如果分别对其取地址会发现地址一样;
// 引用在一般场景下可能没有太大的用处,但在需要输出型参数的时候非常有用
// 本来需要传地址然后解引用的地方(int* i),改成(int& ri)就可以直接用了,ri与i本身等价
int& b; // 该语句是非法的,引用必须在定义的时候就初始化,决定是谁的引用;
// C++的引用不能改变指向,一旦确定是谁的别名之后就不能变为别人的别名了;