社区
C++ 语言
帖子详情
右值引用 - 延长临时变量的生命周期
小陆zi
2018-06-04 10:48:53
大家好:
最近在学习c++的基础部分。右值引用和移动语义可以理解,但是还有一事不明白:
右值引用可以延长临时变量的生命周期。
1,class A &&a = function();
假设function这个函数的返回值不产生临时变量。那这种情况延长那个变量的生命周期
2,function(class A && a)
假设这个实参是右值引用,在传递形参的时候有没有发生临时变量的分配?
谢谢
...全文
2111
8
打赏
收藏
右值引用 - 延长临时变量的生命周期
大家好: 最近在学习c++的基础部分。右值引用和移动语义可以理解,但是还有一事不明白: 右值引用可以延长临时变量的生命周期。 1,class A &&a = function(); 假设function这个函数的返回值不产生临时变量。那这种情况延长那个变量的生命周期 2,function(class A && a) 假设这个实参是右值引用,在传递形参的时候有没有发生临时变量的分配? 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
跑马溜溜的山上
2018-06-05
打赏
举报
回复
右值引用主要作用是解决大对象在作为函数返回值返回时的深度拷贝问题,以及大对象之间的快速复制。 这玩意是给类库实现者用的。只要记住C++11以后的新编译器,STL库的大对象基本可以放心的作为函数返回值返回即可。 做了测试,可以看看我的文章。
C++右值引用的效果测试
jiht594
2018-06-05
打赏
举报
回复
建议跳过左值右值。反正我分不清。 什么lvalue,prvalue,xvalue,glvalue、rvalue,学过几次也学不明白。
小陆zi
2018-06-04
打赏
举报
回复
引用 1 楼 hdt 的回复:
1,第一个如果function不返回临时变量,根本不让你绑定
假设我返回了一个临时变量比如: func() { return A(); } 那么这个临时变量的产生是编译其决定的?看到函数是返回右值,编译器会不会不产生临时变量?
小陆zi
2018-06-04
打赏
举报
回复
引用 2 楼 hdt 的回复:
2、执行以下就清楚了
执行过了 没有发生构造函数。只有注解传递对象的时候才会调用构造函数。会不会是在类中实现一个&&的构造函数?
yshuise
2018-06-04
打赏
举报
回复
临时变量和左值比较复杂 右值就是没有地址的值 但是它很可能变成左值 比如你的第一种情况
真相重于对错
2018-06-04
打赏
举报
回复
2、执行以下就清楚了
真相重于对错
2018-06-04
打赏
举报
回复
1,第一个如果function不返回临时变量,根本不让你绑定
C++系列第2:C++2.0(11+14+17+20)详解及多线程实战
学习并掌握C++2.0(11+14+17+20)的新特性,学习线程及线程池的应用 ---------------------------------------------------给小白学员的3年学习路径及计划技术方面分三块:1.纯开发技术方向2.音视频流媒体专业方向3.项目实战---------------------------------------------------1.纯开发技术方向(1) C++必须要过硬(至少学会10本经典好书)(2) 系统级编程(Windows、Linux),必须特别熟练系统API,灵活运用(3) 框架与工具(Qt、MFC):必须精通其中一种。(4) 架构与设计模式:需要提升一个高度,不再是简单的编码,而是思维模式。(5) 驱动级别(如果有兴趣,可以深入到驱动级:包括Windows、Linux)(6) 最好学习点Java+Html+javascript等WEB技术。2.音视频流媒体专业方向(1) 音视频流媒体基础理论: 必须认真学会,否则看代码就是看天书(2) 编解码方向:精通h.264,h.265(hevc), 包括理论和各个开源库(ffmpeg,libx264,libx265,...)。(3) 直播方向: 精通各种直播协议(rtsp,rtmp,hls,http-flv,...), 钻研各个开源库(live555,darwin,srs,zlmediakit,crtmpserver,...)(4) 视频监控: 理论+开源库(onvif+281818)(EasyMonitor、iSpy、ZoneMinder(web)、...) 3.项目实战(1) Qt项目: 至少要亲手练习10个实战项目(网络服务器、多线程、数据库、图像处理、多人聊天、等等)(2)音视频项目:包括编解码、视频监控、直播等各个方向,都需要亲手实战项目,包括视频服务器、后台管理系统、前端播放器(多端)--------------------------------------------------- 第1章 C++11新特性 41). nullptr关键字与新语法 42). auto和decltype类型推导 6 auto讲解 6 auto示例 7 decltype 83). for区间迭代 94). 初始化列表 105). 模板增强 11外部模板 11类型别名模板 12默认模板参数 126). 构造函数 13委托构造 13继承构造 147). Lambda 表达式 158). 新增容器 20std::array 20std::forward_list 21无序容器 22元组 std::tuple 239). 正则表达式 2610). 语言级线程支持 28多线程库简介 2811).
右值引用
和move语义 31
右值引用
和move语义 32转移左值 3412). constexpr 35第2章 C++14新特性 36Lambda 函数 36类型推导 37返回值类型推导(Return type deduction) 37泛型lambda 39[[弃用的]] [[deprecated]]属性 40二进制数字和数字分隔符 41第3章 C++17新特性 42安装GCC10.2 42安装msys2-x86_64-20200720 42更新镜像 42更新软件库 43安装 MinGW64 等必要的软件 43环境
变量
Path 43编译命令 43constexpr 44typename 45折叠表达式 47结构化绑定 48条件分支语句初始化 49聚合初始化 50嵌套命名空间 52lambda表达式捕获*this的值 53改写/继承构造函数 54用auto作为非类型模板参数 55__has_include 56fallthrough 57nodiscard 57maybe_unused 58第4章 C++20新特性 59编译命令 59concept 59typename 60explicit 61constinit 62位域
变量
的默认成员初始化 62指定初始化 63基于范围的for循环初始化 64放宽基于范围的for循环,新增自定义范围方法 65嵌套内联命名空间 66允许用圆括弧的值进行聚合初始化 67unicode字符串字面量 68允许转换成未知边界的数组 68likely和unlikely 69第5章 C++2.0(11/14/17/20)总结与分析 705.1 C语言与C++ 715.2 语言可用性的强化 725.2.1 常量 725.2.2
变量
及其初始化 735.2.3 类型推导 745.2.4 控制流 765.2.5 模板 775.2.6 面向对象 815.3 语言运行期的强化 835.3.1 Lambda 表达式 835.3.2
右值引用
865.4 容器 885.4.1 线性容器 885.4.2 无序容器 895.4.3 元组 895.5 智能指针与内存管理 905.5.1 RAII 与引用计数 905.5.2 std::shared_ptr 905.5.3 std::unique_ptr 915.5.4 std::weak_ptr 91第6章 C++2.0多线程原理与实战 93什么是并发 93并发的方式 93为什么使用并发 95线程简介 96创建线程的三种方式 971. 通过函数 972.通过类对象创建线程 993.通过lambda表达式创建线程 101thread线程的使用 101互斥量与临界区 105期物Future 111条件
变量
112原子操作 114内存模型 118第7章 C++2.0线程池原理与实战 120线程与线程池的基本原理 1201)、线程 1202)、线程的
生命周期
1213)、什么是单线程和多线程 1214)、线程池 1225)、四种常见的线程池 123线程池的架构与流程 123线程池代码实战 125
理解移动语义(二)--
延长
变量
的
生命周期
有
右值引用
,
生命周期
延长
到引用的
生命周期
结束时
右值引用
延长
其生存期的问题
类类型的右值的确是
临时
变量
,但是类类型的
临时
变量
是可以调用成员函数的,包括(operator=)赋值运算符重载函数,这体现在代码上就是:类类型的
临时
变量
可以赋值。还是上面那个结论右值修改的问题,我如果把fun函数返回值改成内置类型不管你加不加const,你都不能去修改,因为你内置类型返回的将亡值是个纯右值,是不能被修改的,纯右值自带常性。const引用的话你所引用的肯定改不了了,crv=100啊这些都肯定是错的,但是
右值引用
那就可以改了,改的就是里面那么
临时
的将亡值tmp。
深入理解C++11: 02
右值引用
深入理解C++11: 02
右值引用
文章目录深入理解C++11: 02
右值引用
1. 指针成员与拷贝构造2. 移动语义3. 左值、右值和
右值引用
4. std::move强制转换为右值5. 总结 1. 指针成员与拷贝构造 当我们编写一个新类时,需要注意两点: 缺省的拷贝构造函数和赋值操作的行为是否满足我们的预期要求。如果不满足的话,我们就必须自己声明和定义我们需要的这两个函数 通常情况下(不是所...
C++11
右值引用
右值引用
(Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move Sementics) 和精确传递 (Perfect Forwarding)。它的主要目的有两个方面: 消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。 能够更简洁明确地定义泛型函数。 左值,右值的定义 C++( 包括 C) 中所有的表达式和
变量
要么是左值,要么是右值。 通俗的左值的定义就是非
临时
对象,那些可以在多条语句中使用的对象。
C++ 语言
64,645
社区成员
250,475
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章