恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

【C++】014、左值与右值的区别

  • 首页
  • 资讯中心
  • /
  • 【C++】014、左值与右值的区别

相关资讯

蛋仔网:试玩站点的任务状态和渠道字段怎么设计 2026/10/9 9:49:36
Windows和Office智能激活终极指南:5分钟完成永久激活 2026/10/9 9:49:45
《用AI做公众号流量主》第1课:为什么是公众号流量主 2026/10/9 9:50:00

最新资讯

富士康金属件自动化尺寸测量:OpenCV像素到毫米的产线替换逻辑
EEMD/CEEMDAN时序分解+KMeans聚类实战指南
从二分类到多分类:Logistic回归进阶与Softmax实战
深入 re-frame 的动态模型:一个简单到可以在脑中运行模拟的运行时
ANN预测代码复现与调参:解压、数据对齐到模型优化的完整实战指南
积分等式与不等式:打通高数中值定理到应用的思维枢纽

今日推荐

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析
CAN总线错误处理机制深度解析:从位错误到Bus Off的硬件级调试

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

【C++】014、左值与右值的区别

发布时间:2026/10/13 0:24:41
【C++】014、左值与右值的区别 一、左值右值左值左值是有内存地址的持久对象可以取他的地址值右值右值是临时的即将销毁的对象不能取他的地址但可以窃取他的资源。右值的存储位置通常在栈或者寄存器内。右值引用T右值引用是为了把右值这种临时资源拿来继续使用二、左值与右值的鉴别方法在C中能对表达式使用取地址运算符的就是左值不能取地址的就是右值int a 10; // a 是左值a 合法 int* p a; // ✅ OK // int* p2 10; // ❌ 编译错误不能对字面量取地址所以 10 是右值三、对比对比维度左值右值别名有身份的无身份的临时取地址操作可以不可以生命周期长有自己的作用域短面临销毁例子变量(a),i*ptr字面量10iMyClass()能否放在左边通常可以不可以除非使用move右值引用T不可以除非使用move可以四、移动赋值操作std::move1、窃取资源std::move 本质上只是一个强制类型转换static_cast不移动任何东西只是将左值变成右值。真正的移动发生在移动构造函数和移动赋值运算赋里编译器看到右值从而窃取资源而非深拷贝代码#include iostream #include vector #include utility // for std::move class BigData { private: std::vectorint data; // 假设很大10000个元素 public: // 1. 构造函数建立资源 explicit BigData(size_t size) : data(size, 1) { std::cout Constructed (allocated memory)\n; } // 2. 拷贝构造函数深拷贝开销大 BigData(const BigData other) : data(other.data) { std::cout Copied (expensive deep copy)!\n; } // 3. 移动构造函数轻量级指针交换C11核心 BigData(BigData other) noexcept : data(std::move(other.data)) { // 精髓直接窃取 other 的内部指针other.data 变为空 std::cout Moved (cheap pointer swap)!\n; } }; BigData createBigData() { BigData temp(10000); // 创建临时对象左值 return temp; // 返回时触发移动语义C17强制拷贝省略前优先选移动 } int main() { BigData obj1(10000); // 构造 BigData obj2 obj1; // 拷贝深复制慢 - 输出 Copied! BigData obj3 std::move(obj1); // 移动偷数据快 - 输出 Moved! // 注意此时 obj1 处于“有效但未指定”的状态通常是空不要再使用 obj1 }2、右值引用T专门用来捕获右值从而在不拷贝的情况下转移资源右值引用智能绑定右值如果想把左值当右值用必须通过move显示转换int a 5; int lr a; // OK // int lr2 10; // ❌ 错误 const int clr 10; // ✅ OK临时对象生命周期被延长到引用生命周期 int rr 10; // ✅ OK // int rr2 a; // ❌ 错误不能直接绑左值 int rr3 std::move(a); // ✅ OK强制转换此时a的资源可以被偷3、总结左值是有户口本的居民 右值是有暂住证的旅客 move是让居民办理临时注销把资源合法转移给新用户。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号