尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

c++右值引用和移动语义

c++右值引用和移动语义
📅 发布时间:2026/6/20 19:24:58

1. 什么是右值?

  • 左值:有名字,可以找到它放在哪(能取地址的)。
    比如:
int a = 10;   // a 是左值
  • 右值:临时的、没名字的,用完就没了的东西。
    比如:
int b = a + 5;   // a+5 是个临时值,就是右值
int c = 100;     // 100 这个字面量也是右值

你可以理解为:
左值像“家里有户口的人”,长期住在内存里。
右值像“旅馆里住一晚的游客”,用完就要走。

2. 右值引用(T&&)是干嘛的?

右值引用就是专门“接住”这种临时对象的手段。
比如:

void foo(int&& x) {cout << x << endl;
}foo(10);   // 可以

这里 10 是个右值(临时的常量),普通引用 int& 接不住,但 int&& 可以。
所以右值引用的作用是:接管临时值,让它不至于马上消失,还能被高效利用。

3. 为什么需要右值引用?

主要是为了解决 效率问题,特别是“拷贝 vs. 移动”。
拷贝(慢)

string s1 = "hello world";
string s2 = s1;  // 拷贝,需要新建一份内存

移动(快)

string s1 = "hello world";
string s2 = std::move(s1);  // 移动,直接把资源“过户”,不用再拷贝

右值引用就是移动语义的基础。
就像二手房交易:

拷贝 = 再盖一栋一样的房子,成本高。

移动 = 直接把钥匙交给你,省事。

4. 用法直观举例

class MyVector {int* data;size_t size;
public:// 构造函数MyVector(size_t n): size(n) {data = new int[n];cout << "构造" << endl;}// 拷贝构造MyVector(const MyVector& other): size(other.size) {data = new int[size];memcpy(data, other.data, size * sizeof(int));cout << "拷贝构造" << endl;}// 移动构造(右值引用)MyVector(MyVector&& other): size(other.size), data(other.data) {other.data = nullptr;  // 交出资源cout << "移动构造" << endl;}
};

使用:

MyVector v1(100);
MyVector v2 = v1;          // 触发拷贝构造(慢)
MyVector v3 = MyVector(50); // 触发移动构造(快,直接“过户”)

相关新闻

  • 彩笔运维勇闯机器学习--梯度下降法
  • 项目管理软件产业革命:从工具升级到生产力范式转移
  • 详细介绍:Linux--初识网络

最新新闻

  • 2026年5月美国零售销售月率超预期
  • nuScenes数据集实战指南(一)——环境配置与数据初探
  • 2026合肥十大叛逆戒网瘾学校排名|央视推荐+真实案例,家长必看避坑指南 - 辛云教育资讯
  • 嵌入式GUI性能调优:emWin诊断三板斧与API调试实战
  • 松鼠软件管家
  • 刑事合规律师事务所:企业如何选型?三大评估维度与合规服务评测 - 品牌2026

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号