一.引用和指针的区别
先说引用,引用可以理解为给一个变量起一个别名。要注意的是引用的时候必须要初始化,指针则不用。同时引用的值不能更改。一个变量可以有多个引用,但一个引用不能对应多个变量。
使用引用最需要注意的点是传值返回的时候,如果返回的是引用,一定要确保引用的值不被销毁,以为我们都知道,正常的函数调用后会将返回值保存在临时变量中,然后这个函数的栈,会被销毁。最后将临时变量的值返回到主函数。如果你返回的引用值被销毁了的话就会出现越界访问的情况,有点类似指针返回了一个地址,但该地址已经被回收了。
另一个点是引用的时候要注意权限对应 比方说
const int a = 10; int &b = a;
这种操作是不合法的。
权限可以缩小但是不能放大,也就是说可以用 const int 来引用int。
还有另一种情况
int a = 2; const double &b = a;
相同类型的可以直接引用,对于类型不同的加上const限定权限后也会是可以的,以为a的值会先转换成double类型的临时变量且该变量具有常性。由于不能扩大权限所以要加上const
二.引用的一些优点
使用引用可以提高输入输出效率,同时可以直接修改返回对象,大部分指针能做的工作都可以用引用来代替,某种程度上简化了代码
三.底层实现
从底层的汇编代码来看却有一个神奇的事情,引用的汇编代码和和指针取地址的汇编代码是完全相同的。但是从语法角度来看则是完全不同的,一个开辟了新的空间一个没有开辟空间。



