引用和指针的一些细节

引用和指针是C++中易于混淆的概念。

这里从基础概念说起:指针p是对象,和普通变量一样有地址(&p)和值(p),而值p存储的数据类型是数据的地址,以此达到指向其他变量的目的。(访问指向的值用解引用操作符“ * ”)。

而指针有常量指针和指向常量的指针之分,常量指针既是不可改变值的指针(也就是不改变指向的变量),指向常量的指针(也叫指针常量)不能改变(指针指向的)对象的值。


而引用(reference)可以理解为变量的别名,比方说小明,他的小名(别名)叫明明,那么“明明”就是引用。

引用相较于指针,有一些特性:

[1]指针可以为空(null),而引用不行,引用一定义就必须要初始化(绑定对象)。

[2]引用类似于常量指针,不可改变值,一旦绑定就不可再重新和其他对象绑定(而不是拷贝)在一起了。(就好像“明明”只能是小明的小名,不能是其他人的小名)。

 

而[1]的特性也就决定了:拿到一个引用的时候,不用判断非空;而拿到指针的时候,为了稳健和安全,通常需要判断指针空与否。

 

那么为什么要引入引用呢?

这里贴一个Stroustrup的FAQ:

Why does C++ have both pointers and references?

C++ inherited pointers from C, so I couldn't remove them without causing serious compatibility problems. References are useful for several things, but the direct reason I introduced them in C++ was to support operator overloading

很明显了,指针是从c继承下来的,防止出现兼容性问题,而引用有很多用处,但主要用处是为了操作符重载。

 

posted @ 2019-07-31 09:39  jckcoenf  阅读(158)  评论(0编辑  收藏  举报