相关博文:
C++新特性探究(十三):右值引用(r-value ref)&&探究
C++新特性探究(十六):move constructor移动构造
C++新特性探究(13.5):右值引用
C++新特性探究(13.6):右值引用再探究

一. 右值定义

  通俗来讲,赋值号左边就是左值,赋值号右边的就是右值。可以取地址是左值,不可以取地址的是右值。C++11,之前没有明确提出右值的概念,所以C++11以前这些说话都是正确。
  C++11中的左值,仍然等同于C++98左值。C++11中的右值,除了C++98中的右值以外,增加了将亡值的。

对比图如下:

右值引用解决了什么问题?
  为什么要引入右值引用这个概念,其实就是为了解决临时对象带来的效率问题。
  比如,我们返回一个临时对象。在C++课中,返回栈对象第一章中,我们讲过,栈对象是可以返回的。栈对象的引用却不可以返回。
  栈对象返回,如果在没有优化的情况下-fno-elide-constructors,会产生临时对象。

过程如下:

例1

运行结果1:

运行结果2:

  在没有优化的情况下,要经历两次复制,优化以后,各个平台大不相同(有构造一次的,也有拷贝一次的)。
  对此,C++也是志在解决平台不一致的问题。

回顾一:值传递

回顾二:玩指针

回顾三:玩引用

例2:右值引用

分析:



附例2代码:

//小问学编程
#include<iostream>
using namespace std;class A
{public:A(){cout<<"A()"<<this<<endl;}~A(){cout<<"~A()"<<this<<endl;}A(const A &another){cout<<"A(const A&)"<<this<<"->"<<&another<<endl;}void dis(){cout<<"xxxxxxoooooo"<<endl;}
};
A getObjectA()//拷贝是不可以避免的,临时对象一定会产生
{return A();
}int main()
{A&& a=getObjectA();//引用的是临时对象,扩展了临时对象的作用域,延长了其生命周期a.dis();return 0;
}

与左值引用的对比:

  都属于引用类型。

  都必须初始化。左值引用的具名变量值的别名,右值引用是匿名变量的别名。

  左值引用,用于传参,好处在于,扩展对象的作用域。则右值引用的作用就在于延长了临时对象的生命周期。

  避免“先拷贝再废弃”带来的性能浪费。

  对讲亡值进行引用的类型;它存在的目的就是为了实现移动语义。





附:const T & 万能常引用——万能乎?——缺陷——从const T & 到&&.这里未进行分析

C++新特性探究(十三):右值引用(r-value ref)探究相关推荐

  1. std::move C++11 标准新特性: 右值引用与转移语义

    新特性的目的 右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move Sementics) 和 ...

  2. C++11 标准新特性: 右值引用与转移语义

    原文地址 http://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/ C++ 的新标准 C++11 已经发布一段时间了.本文介绍了新 ...

  3. 【转】C++11 标准新特性: 右值引用与转移语义

    VS2013出来了,对于C++来说,最大的改变莫过于对于C++11新特性的支持,在网上搜了一下C++11的介绍,发现这篇文章非常不错,分享给大家同时自己作为存档. 原文地址:http://www.ib ...

  4. 右值引用与move语义

    新特性的目的 右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move Sementics) 和 ...

  5. C++ 11 中的右值引用

    C++ 11 中的右值引用 右值引用的功能 首先,我并不介绍什么是右值引用,而是以一个例子里来介绍一下右值引用的功能: #include <iostream>     #include & ...

  6. C++新特性探究(13.6):右值引用再探究

    相关博文: C++新特性探究(十三):右值引用(r-value ref)&&探究 C++新特性探究(十六):move constructor移动构造 C++新特性探究(13.5):右值 ...

  7. C++新特性探究(13.5):右值引用

    相关博文: C++新特性探究(十三):右值引用(r-value ref)&&探究 C++新特性探究(十六):move constructor移动构造 C++新特性探究(13.5):右值 ...

  8. C++11 标准新特性: 右值引用与转移语义(点评)

    <<C++11 标准新特性: 右值引用与转移语义>> 原文地址如下 http://www.ibm.com/developerworks/cn/aix/library/1307_ ...

  9. C++11新特性——移动语义,右值引用

    移动语义 有一些类的资源是__不可共享__的,这种类型的对象可以被移动但不能被拷贝,如:IO 或 unique_ptr 库容器.string 和 shared_ptr 支持拷贝和移动,IO 和 uni ...

最新文章

  1. 【Windows 逆向】OD 调试器工具 ( CE 中获取子弹动态地址前置操作 | OD 中调试指定地址的数据 )
  2. 产品需求被误解是一种什么样的体验?
  3. 所罗门王之梦(程序员羊皮卷读书笔记)
  4. 数据可视化模块---Matplotlib
  5. 对数学本质特征的若干认识
  6. 开发做甲方还是乙方_建筑行业的职场小白求职时是选择做甲方还是乙方?
  7. [html] 如何给table中的某一列设置固定宽度
  8. 【Python】一些容易忽略的知识点
  9. 2017年3月20日下午学习日志
  10. linux下安装12c中间件,linux下静默安装 weblogic12.2.1.3中间件
  11. springCloud Finchley 实战入门(基于springBoot 2.0.3)【五 Hystrix 服务容错保护】
  12. 网吧网吧无盘服务器配置,网吧无盘服务器配置杂谈
  13. kali安装超详细教程
  14. 扫地机器人的人工智能与传感器
  15. 三目表达式 ---if--else的简写
  16. 2004年 联想员工亲历联想大裁员:公司不是我的家 (网易裁员事件相关文章)
  17. python运行时不让电脑休眠_python实现windows休眠
  18. python求平均数直到0出现while_Python第一周 学习笔记(2)
  19. Unity--游戏字幕
  20. xmppFrameWork的使用

热门文章

  1. Java实现文件复制
  2. linux实现任务计划,linux cron实现计划任务
  3. LogParser的IIS网站分析技
  4. [禅悟人生]谦虚有助于自我消融
  5. PHP中数字检测is_numeric与ctype_digit的区别介绍
  6. 高仿114la网址导航源码完整最新版
  7. linux 目录大小是12288,【系统知识点】linux目录结构(示例代码)
  8. 五子棋python设计心得_python五子棋游戏的设计与实现
  9. 免费直播课|Python数据可视化与科学计算可视化案例分享
  10. tf卡测试软件_真正的白菜价?1G不到1元,铠侠(原东芝存储)microSD卡评测