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

左值引用和右值引用

什么是左值 / 右值?

左值

可以取地址、有名字、可持久存在

int a = 10; int* p = &a; // 可以取地址

特点:

有名字(a)

可以多次使用

生命周期长(作用域内一直存在)

右值

临时值 / 不能取地址(严格说不该取)

int a = 10; int b = a + 5; // a+5 是右值

特点:

没名字(匿名)

临时对象

表达式结束就销毁

左值引用(&)

int a = 10; int& ref = a;

本质:给变量起别名

特点总结

必须绑定左值
一旦绑定不能改绑
修改引用 = 修改原变量

int a = 10; int& r = a; r = 20; cout << a; // 20

不能绑定右值

int& r = 10; // 错误

因为:
右值是临时变量,马上销毁
引用它会变成悬空引用

右值引用(&&)

int&& r = 10;

可以绑定右值(临时对象)

特点总结

专门绑定右值
可以修改临时对象
延长临时对象生命周期

int&& r = 10; r = 20; // 合法

核心区别

特性左值引用 &右值引用 &&
绑定对象左值右值
是否可修改可以可以
生命周期影响不改变延长临时对象生命周期
用途变量别名资源转移 / 移动语义

最重要的:为什么要有右值引用?

核心目的:避免不必要的拷贝,提高性能

例子(没有右值引用)

vector<int> v1 = {1,2,3}; vector<int> v2 = v1; // 拷贝(慢)

使用右值引用(移动语义)

vector<int> v1 = {1,2,3}; vector<int> v2 = std::move(v1); // 移动(快)

本质:

不复制数据

直接“偷资源”(指针)

左值引用 = 别名机制
右值引用 = 资源转移机制

http://www.jsqmd.com/news/505875/

相关文章:

  • Claude Code Hooks 进阶:用 AI 审查 AI,自动防止重复代码
  • 老电工都不一定懂!PLC通讯接口进化史:从DB9接头到工业以太网
  • mT5中文-base零样本增强模型保姆级教程:5分钟启动7860服务并调用API
  • 2024年Rust学习新姿势:用这5个实战项目打通全栈开发(含WASM和嵌入式)
  • 从零开始学FOFA:手把手教你用搜索引擎语法发现网络漏洞
  • MCP身份验证架构重构实战:从OAuth 2.0平滑迁移到2026标准的7步黄金路径
  • FPGA新手必看:用Verilog实现十六进制计数器的5个常见错误及解决方法
  • Prettier插件隐藏玩法:用.prettierrc配置你的专属代码美学
  • 【杭州线下召开】2026年计算智能与机器学习国际学术会议(CIML 2026)
  • Cadence数模混合仿真实战:SDF反标避坑指南(附Verilog模块配置技巧)
  • 深圳HR必看:轰趴馆为何成为团建首选?附高适配门店推荐+实用问答
  • PaliGemma 2情感识别功能详解:从医学影像到电商客服的10个应用场景
  • GLM-OCR实战体验:上传图片秒出结果,识别准确率惊艳
  • Genshin FPS Unlocker技术突破与全场景适配指南:从原理到落地的创新实践
  • 昆船:不造船,却把烟草智能仓库几乎全包了~
  • 幻境·流金实战教程:用负向避尘咒精准去除模糊、畸变、多手指等瑕疵
  • OpenClaw-CN 本地部署完全攻略
  • 从钉钉/飞书到专业BPM:当业务增速跑赢流程架构,如何避免“推倒重来”的技术债?
  • TLB标记字段计算实战:从408真题到Linux内核源码解析(含C语言实现)
  • SOLIDWORKS PDM配置邮件信息系统
  • AnyGen走的不是NotebookLM的路子
  • Vue表单vxe-form配置渲染日期范围选择器的用法
  • 技术解析:五种开源内容访问工具的原理与实践指南
  • DPM++进阶指南:如何用最新扩散模型生成4K高清图像(附Colab示例)
  • 1.28寸圆屏LCD驱动移植与GC9A01显示技术详解
  • 故障录波技术在行业中的应用案例分析
  • 人工智能课
  • 居然还在使用付费的https证书?
  • OBS Composite Blur:终极模糊特效插件完全指南
  • kafka-在centos7上集群部署