当前位置: 首页 > news >正文

C++基础系列【18】引用和指针的区别

博主介绍:程序喵大人

  • 35- 资深C/C++/Rust/Android/iOS客户端开发
  • 10年大厂工作经验
  • 嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手
  • 《C++20高级编程》《C++23高级编程》等多本书籍著译者
  • 更多原创精品文章,首发gzh,见文末
  • 👇👇记得订阅专栏,以防走丢👇👇
    😃C++基础系列专栏
    😃C语言基础系列
    😃C++大佬养成攻略

首先要了解引用的本质。

汇编代码

先看这段源代码:

#include <iostream>

int main() {
    int x = 10;
    int& ref = x;  // 编译器处理为 int* const ref = &x;
    ref = 20;      // 等价于 *ref = 20;

    int* ptr = &x;
    *ptr = 30;
    return 0;
}

代码中有两段类似的代码,一个使用的引用,一个使用的指针。我们看下它们生成的汇编代码,如图(https://godbolt.org/z/cYTov86G6):

这里可以看到,两者生成的汇编代码除了数字,其他完全相同。

因为引用本质上是通过常量指针实现的。

核心区别

特性引用指针
初始化要求必须初始化,且不可重新绑定到其他对象可以声明为空指针(nullptr),后续可修改指向
空值合法性不允许空引用允许空指针(nullptr
内存占用不占用显式内存(编译器优化)占用独立内存(存储地址值)
操作语法直接使用对象语法(无 *->需用 * 解引用或 -> 访问成员
类型安全性强类型绑定,无类型转换风险允许 void* 和危险的类型转换
多级间接访问仅支持单层引用(无引用的引用)支持多级指针(int**
内存地址可见性无法直接获取引用的地址(&ref 返回原对象地址)可直接获取指针变量的地址(&ptr

实践经验

  • 优先使用引用的场景:函数参数传递、运算符重载。
  • 必须使用指针的场景:动态内存管理、低级内存操作、需要空值或重新绑定的场景。

误区

引用是安全的吗?

其实也没那么安全,引用本质上仍依赖对象的有效性。如果引用绑定到已释放的内存,行为未定义(和悬垂指针一样危险):

int* x = new int(10);
int& ref = *x;
delete x;  // 后续使用 ref 会导致未定义行为

码字不易,欢迎大家点赞关注评论,谢谢!


C++训练营

专为校招、社招3年工作经验的同学打造的1V1 C++训练营,量身定制学习计划、每日代码review,简历优化,面试辅导,已帮助多名学员获得offer!训练营介绍

相关文章:

  • 审批流AntV框架蚂蚁数据可视化X6饼图(注释详尽)
  • npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
  • esp32驱动带字库芯片TFT屏幕
  • Kimball维度建模技术解析:从业务需求到维度扩展
  • Java Spring Boot 外卖系统,构建便捷的本地生活服务
  • VS Code C++ 开发环境配置
  • Ollama 框架本地部署教程:开源定制,为AI 项目打造专属解决方案!
  • 最新的PyCharm及AI助手的安装和试用
  • H5DS编辑器是如何让企业快速构建动态页面
  • 一文读懂深度学习中的损失函数quantifying loss —— 作用、分类和示例代码
  • 权限管理Vue实现
  • CHAPTER 6 Object References, Mutability, and Recycling
  • 超越AI边界:智慧法务如何破解法律行业的“最后一公里“难题
  • ReconDreamer:通过在线恢复构建驾驶场景重建的世界模型
  • golang进阶知识专项-理解值传递
  • 记录一次Spring事务失效导致的生产问题
  • 第七节:基于Winform框架的串口助手小项目---协议解析《C#编程》
  • DeepSeek开源周:五大创新项目详解
  • 监听 RabbitMQ 延时交换机的消息数、OpenFeign 路径参数传入斜杠无法正确转义
  • Docker 部署开源项目HivisionIDPhotos详细教程
  • wordpress子站点/绍兴seo优化
  • iis做的网站模板/seo怎么去优化
  • 辽阳免费网站建设/百度seo排名如何提升
  • 网站建设企业排名推广/从哪里找网络推广公司
  • 张家港网站开发/做灰色词seo靠谱
  • 濮阳网站/网站seo服务商