【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是让居民办理临时注销把资源合法转移给新用户。

相关新闻

【总结】Nginx 反代 Docker 容器:容器重建后刷新 502,一行配置根治

【总结】Nginx 反代 Docker 容器:容器重建后刷新 502,一行配置根治

Nginx 反代 Docker 容器:容器重建后刷新 502,一行配置根治 摘要:本文深入分析了Nginx反向代理Docker容器时,容器重建后出现502 Bad Gateway错误的根本原因——Nginx对静态upstream主机名只在启动时进行一次DNS解析并永久缓存IP。当Docker容器重建获得新IP后,Nginx仍使用旧…

2026/7/8 2:29:27 阅读更多 →
玩转Rust高级应用 怎么理解在标准库中,有一个std::intrinsics模块,它里面包含了一系列的编译器内置函数

玩转Rust高级应用 怎么理解在标准库中,有一个std::intrinsics模块,它里面包含了一系列的编译器内置函数

内置函数在标准库中,有一个std::intrinsics模块,它里面包含了一系列的编译器内置函 数。这些函数都有一个extern"rust-intrinsic"修饰,它们看起来都像一种特殊的 FFI 外部函数,大家打开标准库的源代码src/core/intrinsi…

2026/7/8 2:29:27 阅读更多 →
学乒乓球不踩坑的几大核心:专业、有资质、教练带训有成绩、场地保障、多部门背书、持久老牌

学乒乓球不踩坑的几大核心:专业、有资质、教练带训有成绩、场地保障、多部门背书、持久老牌

在全民运动的热潮下,乒乓球作为国球,深受大众尤其是青少年的喜爱。然而,选择一家靠谱的乒乓球培训机构并非易事,一不小心就可能踩坑。今天,就以重庆市巴南区来奥莱体育培训有限公司旗下的理想乒乓为例,给大…

2026/7/8 2:29:27 阅读更多 →

最新新闻

量化派:构建物理AI通用技术底座,开启“卖能力”产业拐点

量化派:构建物理AI通用技术底座,开启“卖能力”产业拐点

量化派探索物理世界生产力,引领物理AI新趋势大语言模型探索了数字世界的生产力,而物理AI正在重新探索物理世界的生产力。量化派不卖机器人本体,也不卖单一解决方案,而是售卖让机器人理解物理世界的通用能力层——物理世界基础模型…

2026/7/8 3:19:46 阅读更多 →
房地产顾问如何突破单一业务模式转型为家族资产配置顾问?

房地产顾问如何突破单一业务模式转型为家族资产配置顾问?

房产中介的传统业务模式高度依赖单套物业的成交。交易一完成,客户关系往往随之结束。当客户手里积累到第二套、第三套房产,开始考虑跨境持有、子女教育与婚姻资产保护时,单一经纪人的知识储备常常触及天花板。客户的问题从"买哪套房子&q…

2026/7/8 3:19:46 阅读更多 →
计网-如何理解冲突域和广播域

计网-如何理解冲突域和广播域

如何理解冲突域和广播域 1. 冲突域 (Collision Domain) 核心定义: 在一个网络中,如果两台设备同时发送数据会导致信号在物理介质上发生碰撞(冲突),那么这些设备就处于同一个冲突域。 通俗理解: 想象一条单车…

2026/7/8 3:17:45 阅读更多 →
不是接口调不通,而是链路没拆清:Dify RAG、向量引擎与 timeout 排查实战

不是接口调不通,而是链路没拆清:Dify RAG、向量引擎与 timeout 排查实战

很多人第一次把 Dify 接进业务系统时,问题通常会被问得很直接:Dify 用什么 API 接口? 如果只是跑通一个简单 Demo,这个问题并不复杂。聊天应用调用聊天消息接口,工作流应用调用工作流运行接口,知识库管理调…

2026/7/8 3:15:45 阅读更多 →
2026无线充赛道洗牌!Qi认证才是品牌合规底气与终端成交利器

2026无线充赛道洗牌!Qi认证才是品牌合规底气与终端成交利器

01 Qi认证,是无线充行业的硬性准入壁垒很多从业者误以为无线充入行门槛低、随便贴牌就能卖,实则不然。WPC无线充电联盟对Qi认证有着极其严苛的审核标准,绝非普通质检证书可比:✅ 品牌资质、工厂品控、生产线合规全方位审核&#x…

2026/7/8 3:11:44 阅读更多 →
三款热门随身WiFi用了三个月:格行、波导、华为,谁的信号先垮、流量先虚?

三款热门随身WiFi用了三个月:格行、波导、华为,谁的信号先垮、流量先虚?

随身WiFi新机到手,测速数据往往都很漂亮,但真正拉开产品差距的,是长期使用后的真实表现。使用一两个月后,信号是否持续稳定、流量是否偷偷虚标提速、机身发热是否加剧、会不会频繁断流,才是决定日常体验的核心关键。本…

2026/7/8 3:09:44 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻