左值和右值的区分
左值:有内存 或 有名字 eg. int &a = b;
右值:没内存 或 没名字(临时量) eg. int &&a = 10;
注:引用折叠 :&& + & = &, && + && = &&
int a = 10; // a是左值
int &b = a; // b是左值引用
int &c = 20; // 错误,不能用左值引用绑定一个右值
int &&d = 20; // 正确,可以把右值绑定到一个右值引用上
int &f = d; // 一个右值引用变量,本身是个左值
添加带右值引用参数的 拷贝构造函数和赋值重载函数
可以省略函数调用返回临时变量时的内存开辟、内存释放和拷贝数据了,提升临时对象操作过程中的效率。