左值、右值、左值引用,右值引用,std::move函数
1. 左值和右值
int i = 10; // 对象:一块内存区域i = 20;// 左值:能用在赋值语句等号左侧的东西,它能够代表 一个地址// 右值:不能作为左值的就是右值// 结论:C++ 的一条表达式,要么就是左值,要么就是右值,不可能两者都不是// 左值有时候能够被当做右值使用i = i + 1; // 因为已经出现在左侧了,所以是左值【i 用在等号右边的时候,我们说 i 有一种右值属性(不是右值)】// 用到左值的运算符有哪些:// a) 赋值运算符int a;printf("%d\n", a = 4); // 整个赋值语句的结果仍然是左值(即:一个内存地址)(a = 4) = 8;// b) 取地址 &int b = 5;int* p = &b; // 指针变量也是变量(所以也是左值)// c) string, vector 下标[] 都需要左值string abc = "I love You";vector<int>::iterator iter;abc[0];iter++;iter--;// d) 通过看一个运算符在一个字面值上能不能操作,我们就可以判断运算符是否用到的是左值// i++,5++// 左值表达式【左值】、右值表达式【右值】// 左值:代表一个地址,所以左值表达式的求值结果,就得是一个对象。
2. 引用分类
2.1 左值引用
2.2 右值引用
3. std::move 函数
4. 左值和右值总结说明