C++ primer 查漏补缺六:左值和右值

左值和右值

4.1 章
简单来说:左值可以位于赋值语句的左侧,右值不行
C++ 里面这个问题比较复杂,我们结合运算符一个个看

赋值运算符 : int a =1;
左值作为左侧运算对象,结果是一个左值

取地址符: 取地址符作用于一个左值运算对象,返回一个右值(指针)

int a =1;
&a;//结果是右值
int * p =&a;

而 内置解引用 , 下标 , 迭代器解引用 , string vector的下标 求值结果都是左值

内置类型和迭代器的递增递减运算符作用于左值运算对象,结果也是左值

左值引用和右值引用

右值引用(rvalue reference): 必须绑定到右值的引用。我们通过&&而不是&来获得右值引用。

右值引用有一个重要的性质一只能绑定到一个将要销毁的对象。因此,我们可以自由地将一个右值引用的资源“移动”到另一个对象中。

左值引用(lvalue reference),不能将其绑定到要求转换的表达式、字面常量或是返回右值的表达式。但我们可以将一个cost的左值引用或者一个右值引用绑定到这类表达式上。

右值引用有着完全相反的绑定特性:我们可以将一个右值引用绑定到这类表达式上,但不能将一个右值引用直接绑定到一个左值上。

C++ primer 查漏补缺六:左值和右值_第1张图片

为什么要引入右值引用

第十三章

未完待续

C++右值引用(std::move)
为什么C++11会引入右值引用?

你可能感兴趣的:(C++查漏补缺,C++,c++)