C++11右值引用
【C++11右值引用】
1、什么是左值?什么是右值?
左值是表达式结束后依然存在的对象;右值是表达式结束时就不再存在的对象。
2、std::move的作用是什么?

std::move用于把任意类型转化为右值引用,以方便调用move构造函数/move赋值函数。
std::forward的作用是什么?把左值引用还原为左值,把右值引用还原为右值,即把尽可能把值变变右值。
3、四大类型
1)non-const lvalue
2)const lvalue
3)non-const rvalue
4)const rvalue
4、为什么non-const lvalue只能绑定到本类对象?
首先因为const的限制non-const只能绑定到non-const,因此排除(2)、(4),再者如果绑定到non-const rvalue,则有可能导致在后续修改rvalue,这显然有巨大风险。
5、为什么non-const rvalue只能绑定到本类对象?
如果允许绑定到non-const lvalue,则有可能导致数据被窃取;如果绑定到const rvalue,const lvalue则有可能修改原数据。
6、template<typename T >
void f(T&& t){ g(t); }
我们规定:
如果实参类型为右值,那么T&&就被推导为右值引用。
如果实参类型为左值,那么T&&就被推导为左值引用。
7、有了右值引用后,需要添加以下类成员函数:
1)右值引用构造函数。
2)右值引用拷贝构造函数。
参考:
1、http://www.cnblogs.com/hujian/archive/2012/02/13/2348621.html
2、http://blog.csdn.net/pongba/article/details/1697636
C++11右值引用的更多相关文章
- 关于C++11右值引用和移动语义的探究
关于C++11右值引用和移动语义的探究
- C++ 11 右值引用
C++11中引入的一个非常重要的概念就是右值引用.理解右值引用是学习“移动语义”(move semantics)的基础.而要理解右值引用,就必须先区分左值与右值. 注意:左值右值翻译可能有些问题 *L ...
- C++ 11 右值引用以及std::move
转载请注明出处:http://blog.csdn.net/luotuo44/article/details/46779063 新类型: int和int&是什么?都是类型.int是整数类型,in ...
- 【转】C++ 11 右值引用的理解
右值引用的目的之一,是为了C++中一个比较影响性能的问题:拷贝临时对象,例如,在 int foo(){ ... } int x; x = foo(); 中,在第三句中,发生了以下的事情: 1.销毁 x ...
- C++11右值引用和std::move语句实例解析
关键字:C++11,右值引用,rvalue,std::move,VS 2015 OS:Windows 10 右值引用(及其支持的Move语意和完美转发)是C++0x将要加入的最重大语言特性之一.从实践 ...
- C++11 右值引用和转移语义
新特性的目的 右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move Sementics) 和 ...
- c++11——右值引用
1. 左值和右值 左值是表达式结束之后仍然存在的持久化对象,而右值是指表达式结束时就不再存在的临时对象. c++11中,右值分为两种类型:将亡值(xvalue, expiring value) ...
- C++11 右值引用 与 转移语义
新特性的目的 右值引用(R-value Reference)是C++新标准(C++11, 11代表2011年)中引入的新特性,它实现了转移语义(Move Semantics)和精确传递(Perfect ...
- c++11 右值引用和移动语义
什么是左值.右值 最常见的误解: 等号左边的就是左值,等号右边的就是右值 左值和右值都是针对表达式而言的, 左值是指表达式结束后依然存在的持久对象 右值是指表达式结束时就不再存在的临时对象区分: 能对 ...
随机推荐
- 【Android】 PopupWindow使用小结
PopupWindow的很多用法网上比较多,我就不做过多解释了,只说下可能会遇到的问题,以及解决办法: 1.PopupWindow中的listview无响应 这个主要是因为show写在了set ...
- RAD DELPHI XE5的android开发环境配置
RAD XE5 支持本地化跨平台编译(IOS,OS-X,WIN 64,WIN32,ANDROID) 对于android的开发环境,XE5支持模拟器,和真机设备两种模式: 1. 模拟器:(支持4.0.3 ...
- 51nod1257 背包问题 V3
分数规划经典.开始精度1e-3/1e-4都不行,1e-5就A了 #include<cstdio> #include<cstring> #include<cctype> ...
- 使用C++读写Excel
1.导入Excel类型库 使用Visual C++的扩展指令#import导入Excel类型库: 1 2 3 4 5 6 7 8 9 10 11 12 #import "C:\\Progra ...
- ubuntu下安装Matlab
(注:本文部分内容转自互联网) 一. 安装程序Step 1:下载matlab的安装文件至主目录下,讲matlab文件重命名为Mathworks.Matlab.R2012a.Unix.isoStep 2 ...
- ORACLE clusterware组成
oracle cluterware是一个单独的安装包,一旦安装部署好后,每个节点上的oracle cluterware会自动启动,oracle cluterware的运行环境由两个磁盘文件,若干后台进 ...
- 【解题报告】[动态规划] RQNOJ - PID105 / 核电站问题
原题地址:http://www.rqnoj.cn/problem/105 解题思路: 状态表示: 数组dp[i][j]中的j拆成M位二进制(后缀B表示). 如:M=3时 dp[5][000B]表示第3 ...
- T-SQL备忘(3):分组合并
--CREATE TABLE test(code varchar(50), [name] varchar(10),[count] int ) --INSERT test SELECT '001' , ...
- A. Puzzles CodeForces Round #196 (Div.2)
题目的大意是,给你 m 个数字,让你从中选 n 个,使得选出的数字的极差最小. 好吧,超级大水题.因为要极差最小,所以当然想到要排个序咯,然后去连续的 n 个数字,因为数据不大,所以排完序之后直接暴力 ...
- Android RecyclerView使用详解(一)
一.前言 RecyclerView是谷歌V7包下新增的控件,用来替代ListView的使用,在RecyclerView标准化了ViewHolder类似于ListView中convertView用来做视 ...