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

[原创](Modern C++)现代C++的关键性概念: 什么是左值引用? 什么是右值引用?

[作者]
常用网名: 猪头三
出生日期: 1981.XX.XX
企鹅交流: 643439947
个人网站: 80x86汇编小站
编程生涯: 2001年~至今[共24年]
职业生涯: 22年
开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、
开发工具: Visual Studio、Delphi、XCode、C++ Builder、Eclipse
技能种类: 逆向 驱动 磁盘 文件 大数据分析
涉及领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全/macOS应用软件安全
项目经历: 股票模型量化/磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测
专注研究: 机器学习、股票模型量化、金融分析

[序言]
在C++的发展历程中, "引用"一直是重要且常用的语言特性. C++98引入的左值引用(lvalue reference)极大地简化了对对象的别名操作. 而在C++11中, "值引"(rvalue reference)的加入则进一步增强了语言的表达能力, 其在"移动语义和完美转发等场景中发挥了关键作用. 

[左值引用(Lvalue Reference)] 
这是C++早期就存在的“传统”引用, 语法: 类型标识符& 引用名 = 左值表达式. 特点: 必须初始化且只能绑定到左值, 绑定后对引用的操作等同于对原对象的操作.

[右值引用(Rvalue Reference)]
这是C++11引入的新特性, 语法: 类型标识符&& 引用名 = 右值表达式. 特点: 可绑定到右值(如临时变量、字面量、运算结果)

[代码演示]

int int_A = 88;                       // 普通整型变量, 左值
int& int_A_lRef = int_A;             // 左值引用, 绑定到 int_A

int&& int_B_rRef = int_A + 10;       // 右值引用, 绑定到运算结果(右值)
int&& int_C_rRef = 88;               // 右值引用, 绑定到字面量(右值)

const int& int_C_lRef = int_A * 10;  // 常量左值引用, 可绑定到右值(运算结果)

[代码说明]
1. int& int_A_lRef = int_A;
   * int_A_lRef为左值引用, 绑定到已有的变量int_A. 对int_A_lRef的修改会直接影响int_A.

2. int&& int_B_rRef = int_A + 10;
   * int_A + 10是一个右值表达式, int_B_rRef通过右值引用绑定到该临时结果.

3. int&& int_C_rRef = 88
   * 字面量88是右值, 可直接绑定到右值引用int_C_rRef.

4. const int& int_C_lRef = int_A * 10;
   虽然int_A * 10产生右值, 但常量左值引用允许绑定到右值, 以延长临时对象的生命周期.

[总结]
左值引用和右值引用在语法上的主要区别是引用符号的不同: 左值引用使用单个&符号, 而右值引用使用双&&符号.
* 左值引用要求右侧的表达式必须有明确的内存地址, 因此只能绑定到左值.
* 右值引用能够绑定到临时对象或没有内存地址的右值.
* 常量左值引用可以绑定到右值, 这使得在只读场景下能够安全地访问临时对象.

相关文章:

  • NO.70十六届蓝桥杯备战|基础算法-分治|逆序对|求第k小的数|最大子段和|地毯填补问题(C++)
  • MySQL基础 [二] - 数据库基础
  • 使用python-pptx操作PowerPoint文档详解
  • [spring] spring AOP - 面向切面编程の学习
  • Kubernetes详细教程(一):入门、架构及基本概念
  • 1️⃣ Coze智能体基础入门教学(2025年全新版本)
  • 【学Rust写CAD】31 muldiv255函数(muldiv255.rs,已经取消)
  • 【ElasticSearch】
  • linux | ubuntu安装docker
  • 破局与赋能:信息系统战略规划方法论
  • 【从零实现Json-Rpc框架】- 项目实现 - 服务端registrydiscovery实现
  • MySQL Explain 分析 SQL 执行计划
  • Navicat Premium 17 安装教程
  • P4779 【模板】单源最短路径(标准版)
  • Vue CLI创建项目指南
  • 【leetcode100】买卖股票的最佳时机
  • 小家电等电子设备快充方案,XSP15支持全协议和支持MCU与电脑传输数据
  • 自动化备份全网服务器数据平台
  • 快手Python开发面经及参考答案
  • Android Canvas动画实践:实现小球旋转、扩散、聚合效果
  • 济南建网站哪家好/硬件优化大师下载
  • 做系统去哪个网站好/seo关键词排名优化方案
  • 网站多久需要维护/线上培训
  • 做带字头像的网站/免费有效的推广平台
  • 网站建设需求方案文档/安卓手机游戏优化器
  • 惠阳网站建设/网销是做什么的