MoreEffect[1] 指针和引用的区别
指针和引用本质都是某一对象的虚拟内存地址,程序可以皆由它们修改指向的实例。
引用必须在声明时初始化,且指向有效的对象
一般变量和指针在声明时可以不初始化,而且指针经常一开始定义为空,引用则总是指向有效的对象。因此,在调用引用对象时不需要像调用指针一样做空判断,使用效率更高。
引用只能在初始化时赋值,生命周期内只能是唯一对象的别名,也不存在指针常量/常量指针的情况。当需要在不同时间指向不同对象时,应使用指针。
引用的操作符更加直观
我们需要使用指针运算符来操作指针指向的对象,而引用则更加直接。在重载运算符时,应该使用引用。
如operator[],其返回的是对应下标值的引用,如果返回值是指针,代码会变得难以理解:
vector<int> v(10);
*v[2] = 10;//向量的第三个值赋值为10
引用作为函数返回值时,需要考虑指向值的作用范围和生命周期,不应返回一个非静态局部变量引用。
何时使用引用
摘自C++ Primer Plus
- 程序员能够修改调用函数中的数据对象
- 通过参数传递引用而不是整个数据对象,提高允许速度
- 如果数据对象很小,如内置数据类型或小型结构,则按值传递
- 如果数据对象是数组,则使用指针,并声明为指向const的指针
- 如果数据对象是较大的结构,则使用const指针或const引用
- 如果数据对象是类对象,则使用const引用

浙公网安备 33010602011771号