读书笔记之C++的引用与指针

引用的特性及其与指针的比较如下:
(1)引用在创建的同时必须初始化,即引用到一个有效的对象;而指针在定义的时候不必初始化,可以在定义后面的任何地方重新赋值;
(2)不存在NULL引用,引用必须与合法的存储单元关联;而指针可以是NULL。如果把一个引用初始化为0,例如:
const int& rInt = 0;
其语义并非是把引用初始化为NULL,而是创建一个临时的int对象并用0来初始化它,然后再用它来初始化引用rInt,而该临时对象将一直保留到rInt销毁的时候才会销毁。所以,不要用字面常量来初始化引用;
(3)引用一旦被初始化为指向一个对象,它就不能被改变为对另一个对象的引用(即“从一而终,矢志不渝”);而指针在任何时候都可以改变为指向另一个对象。给引用复制并不是改变它和原始对象的绑定关系。但指针就大不一样了。
(4)引用的创建和销毁并不会调用类的拷贝构造函数和析构函数;
(5)在语言层面,引用的用法和对象一样;在二进制层面,引用一般是通过指针来实现的,只不过编译器帮我们完成了转换。


引用既有指针的效率,又具有变量使用的方便性和直观性。
“引用传递”的性质像“指针传递”,而书写方式像“值传递”。实际上“引用”可以做的任何事情,“指针”都能够做,为什么还要“引用”呢?
答案是:“ 用适当的工具做恰如其分的工作”。“引用”体现了最小特权原则,即给予程序元素足以完成其功能的最小权限。指针能够毫无约束地操作内存中的任何东西,尽管功能强大,但是非常危险。

猜你喜欢

转载自blog.csdn.net/qq_37385181/article/details/80598154
今日推荐