---------------------c+11------------------------
-------------------------------------------------
1.左值和右值
左值是表达式结束后依然存在的持久对象(代表一个在内存中占有确定位置的对象)
左值引用的基本语法:type &引用名 = 左值表达式;
右值是表达式结束时不再存在的临时对象(不在内存中占有确定位置的表达式)
右值引用的基本语法type &&引用名 = 右值表达式;
便携方法:对表达式取地址,如果能,则为左值,否则为右值
2.std::move函数(移动语义)
std::move作用主要可以将一个左值转换成右值引用,从而可以调用C++11右值引用的拷贝构造函数(浅拷贝,避免深拷贝)
std::move应该是针对你的对象中有在堆上分配内存这种情况而设置的
3.std::forward函数(完美转发)
C++完美转发是指一种能够传递函数参数或对象的同样类型(例如左值或右值属性)和cv限定符(const或volatile)的方式,
同时保留原参数的准确数值类别和cv限定符的转发机制。
完美转发通过使用引用折叠机制和std::forward函数来实现。
所有的折叠引用最终都代表一个引用,要么是左值引用,要么是右值引用。
规则是:如果任一引用为左值引用,则结果为左值引用。否则(即两个都是右值引用),结果才是右值引用