1.右值与右值引用
左值:存储在内存中,有明确地址(可取地址)的数据
右值:可以直接提供数据值的数据,不可取地址
可以对表达式取地址(&)的就是左值,所有有名字的变量和对象都是左值;右值是匿名的
//左值
int num = 1;
//左值引用
int& a = num;
//右值
//右值引用
int&& b = 5;
//常量左值引用
const int& c= num;
//常量右值引用
const int&& d = 2;
//const int&& e = b;//error
//const int&& f = d;//error
无论左值引用还是右值引用,都必须初始化,都是取别名,都是为了提升效率;右值引用可以延长右值(临时变量)存活周期;左值引用为了避免指针或者值传递时的内存拷贝
右值分为纯右值(数字、字符串、字面量常量、、lambda表达式、非引用返回的临时变量、运算表达式返回的临时变量)与将亡值(与右值引用有关的表达式,如T&&类型的函数返回值、std::move)
class RightLifecycle
{
public:
//浅拷贝
RightLifecycle() :m_num(new int(100)){
cout << "构造函数 :Right