主要整理与http://c.biancheng.net/view/7829.html 和 《c++primer》
左值和右值
- 左值可以位于赋值语句左侧,右值则不能
- 当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。
右值 :要么是常量,要么是在表达式求值过程中创建的临时对象
左值引用和右值引用
- 左值引用: &
int num = 10;
int &b = num; //左值引用
int &c = 10; //错误,无法对右值添加左值引用
//但是可以对 右值添加常量左值引用。也就是说,常量左值引用既可以操作左值,也可以操作右值
const int &e = num;
const int &f = 10;
- 右值引用:&&
右值引用:右值往往是没有名称的,因此要使用它只能借助引用的方式。这就产生一个问题,实际开发中我们可能需要对右值进行修改(实现移动语义时就需要),显然左值引用的方式是行不通的。
int num = 10;
int && b = num; //错误,右值引用不能初始化为左值,可用以下做法
int && c = std::move(num); //move()::将左值转换成右值
int && d = 10;
a = 100; //右值引用可以修改右值
const int&& e = 10;//也可以定义常量右值引用
右值引用常用于 :移动语义和完美转发