引用与指针的区别
需要预先学习:
1. 语法层面
指针的值是地址,需要通过解引用操作符*来访问指针所指向的对象,而引用是一个已存在变量的别名,可以直接使用引用名来访问变量。
int num = 10;
int* ptr = #
int& ref = num;
std::cout << *ptr << std::endl;
std::cout << ref << std::endl;
2. 资源持有层面
引用天然地不支持更换对象,而指针需要在*后加const修饰才能实现类似语义:
int& ref = num; // ref 永远绑定 num
ref = num2; // 这是把 num2 的值赋给 num,而不是让 ref 绑定 num2
// 相当于:
int* const ptr = # // ptr 永远指向 num
3. 内存层面
引用在一些实现中不占用额外的内存空间,而指针是一个变量,会占用一定的内存(4字节或8字节,取决于系统架构)。
有些时候引用底层实现就是指针
4. 关于空值的处理
引用不可以为空,一定要绑定到某个对象上,而指针可以为nullptr,表示不指向任何对象。
int& ref; // 错误操作,引用必须初始化
int* ptr = nullptr; // 正确操作,指针可以为空


