前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++右值引用小说明

C++右值引用小说明

原创
作者头像
kkindof
发布2019-03-28 16:20:37
1.4K0
发布2019-03-28 16:20:37
举报

右值引用在编码和性能上确实带来了不少的便利。

不过最近在函数返回临时对象的case下发现一些不同:

有一条原则是在NRVO时候,如果函数体内存在不同的分支返回不同的变量 如if x return a; else return b;

则RVO失效,试验了下有下面的结果(用常见的string实验):

1.在linux下RVO正常 (tlinux 2.2 )。

2.在windows(vs2015)下情况就有点特殊:只在第一个return使用了RVO,后面的return并没有

PS:本人以前研究底层的汇编的原因,所以比较喜欢看原理,从汇编角度看RVO的实现原理 其实是编译器偷偷的把外部返回值接收者的变量的地址做为一个隐藏参数传进了函数,这就为RVO提供了充分的可能条件。理解指针和内存的话,其实什么魔法都逃不了这2个概念。

以前的参数引用 也是如此(传了变量的指针,原理不变,只是编码上换了新样)

类函数访问类成员也是如此(对象作为ECX传进函数)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
TencentOS Server
TencentOS Server 是腾讯云推出的 Linux 操作系统,它旨在为云上运行的应用程序提供稳定、安全和高性能的执行环境。它可以运行在腾讯云 CVM 全规格实例上,包括黑石物理服务器2.0。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档