为什么 C++ 有指针了还要引用?

在已经凉了的字节面试中被问到,为什么 C++ 有指针了还要引用?

 

的确,引用的底层也是指针实现的,引用和指针在编译结束之后汇编指令是一样的,引用会占用和指针相同大小的数据空间。

引用传递,只是明面上,没有使用值传递,值传递本身是不可避免的。编译器,暗地里通过指针(或者其他可以替代指针的数据类型)的值传递,替换了引用传递。

引用能实现的基本上指针都可以实现,那为什么C++还需要引入引用呢?

先说结论:直接的原因是为了支持运算符重载

下面看看C++之父Bjarne Stroustrup是怎么说的吧:

 

 

也就是说,假设没有引用,那么,用指针来operator overloading操作。 

 A operator +(const A *a, const A *_a);
那么使用的时候,&a + &b,这样看起来是不是很难受。

 

除此之外,

用指针的使用经常犯得错:1,操作空指针,2,操作野指针,3,不知不觉改变了指针的值,而后还以为该指针正常。如果我们要正确的使用指针,我们不得不人为地保证这三个条件。而引用的提出就解决了这个问题。
引用区别于指针的特性是 :1,不存在空引用(保证不操作空指针),2,必须初始化(保证不是野指针),3,一个引用永远指向他初始化的那个对象(保证指针值不变)。

参考链接:

1. https://blog.csdn.net/a3192048/article/details/84621775

2. https://www.zhihu.com/question/34988367

posted @ 2020-04-14 09:43  Rogn  阅读(423)  评论(1编辑  收藏