[原创](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产生右值, 但常量左值引用允许绑定到右值, 以延长临时对象的生命周期.

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不是代码教父

我的创作动力离不开你的真诚激励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值