一、本质区别:
-
引用是对象的别名,不占用内存空间
-
指针是一个变量,存储了对象的内存地址
二、引用与指针的五个区别点
1.初始化
-
引用定义时必须绑定一个对象,不能是空引用
-
指针可以不初始化,也就是一个野指针
2.内容变化
-
引用一旦绑定,永远不能再指向另一个对象
-
指针可以通过复制改变指向,一个指针通过赋值预算福=可以指向其他对象的地址
3.语法使用差异
-
引用直接使用变量名来访问对象,就像普通变量一样使用
-
指针需要用*接引用才能访问对象,使用->来访问对象的属性值和方法调用
4.空引用与空指针
-
引用必须绑定有效对象,不允许空引用存在
-
指针可以是nullptr,使用前需要判空
5.size计算
-
对引用sizeof得到的是对象的大小
-
对指针使用sizeof得到的是指针本身的大小,表示指针变量本身所占的字节数,64位的计算机结果值为8字节
三、引用的底层实现
-
引用的底层通常使用指针常量来实现的。这是编译器常见实现方式
-
指针常量 * const,常量其内容值不可变。这也是引用必须在初始化时绑定对象,且不可变更绑定的原因所在
代码示例
int a = 10;
int& ref = a; // 底层:int* const ref = &a;
ref = 20; // 底层:*ref = 20;
四、既然引用的底层是指针,为何还要创建引用
-
引用主要是为了支持运算符重载和拷贝构造函数的使用
-
在使用重复[] 或 = 时返回引用,可以连续复制
-
而且引用比指针使用更安全,不用担心空指针,也不必显示解引用。
586

被折叠的 条评论
为什么被折叠?



