左值和右值
4.1 章
简单来说:左值可以位于赋值语句的左侧,右值不行
C++ 里面这个问题比较复杂,我们结合运算符一个个看
赋值运算符 : int a =1;
左值作为左侧运算对象,结果是一个左值
取地址符: 取地址符作用于一个左值运算对象,返回一个右值(指针)
int a =1;
&a;//结果是右值
int * p =&a;
而 内置解引用 , 下标 , 迭代器解引用 , string vector的下标 求值结果都是左值
内置类型和迭代器的递增递减运算符作用于左值运算对象,结果也是左值
左值引用和右值引用
右值引用(rvalue reference): 必须绑定到右值的引用。我们通过&&而不是&来获得右值引用。
右值引用有一个重要的性质一只能绑定到一个将要销毁的对象。因此,我们可以自由地将一个右值引用的资源“移动”到另一个对象中。
左值引用(lvalue reference),不能将其绑定到要求转换的表达式、字面常量或是返回右值的表达式。但我们可以将一个cost的左值引用或者一个右值引用绑定到这类表达式上。
右值引用有着完全相反的绑定特性:我们可以将一个右值引用绑定到这类表达式上,但不能将一个右值引用直接绑定到一个左值上。
为什么要引入右值引用
第十三章
未完待续