为什么 C++ 有指针了还要引用
转载:https://blog.csdn.net/TwoTon/article/details/124475088
引用传递,只是明面上,没有使用值传递,值传递本身是不可避免的。
编译器,暗地里通过指针(或者其他可以替代指针的数据类型)的值传递,替换了引用传递。
所以引用传递,实质上是地址传递,别名这东西只是概念,是一种抽象,别名是没法传递的。
别名,可不是真实的数据类型。
因为,函数传递参数需要,数据复制,所以明的暗的值传递,不可避免。
引用的高效,在于对大的数据,不用直接的复制数据。
引用能实现的基本上指针都可以实现,那为什么C++还需要引入引用呢?下面看看C++之父Bjarne Stroustrup是怎么说的吧:
真相大白,原来C++引用的引入是为了支持运算符重载。顺便提一句,既然C++引入了引用,那为什么C++不和Java一样抛弃指针呢?
答:为了兼容C语言。
补充一点引用带来的好处:
用指针的使用经常犯得错:
1.操作空指针;
2.操作野指针;
3.不知不觉改变了指针的值,而后还以为该指针正常;
如果我们要正确的使用指针,我们不得不人为地保证这三个条件。而引用的提出就解决了这个问题。
引用区别于指针的特性是 :
1.不存在空引用(保证不操作空指针);
2.必须初始化(保证不是野指针);
3.一个引用永远指向他初始化的那个对象(保证指针值不变);
人为保证变为了编译器来保证,更加安全。