左值与右值

要想理解左值引用与右值引用首先要知道什么是左值什么是右值,通俗的说等号左边就是左值等号右边就是右值情况往往是这样但并不准确。

int a;

a = 10;

那么a就是左值,10就是右值。

int a;

a = 10;

b = a;

这样来看,b就是左值,a就是右值了?然而事实并非如此。所以说不要以位置论左右。

在我看来,左值一般用来取它的地址,右值一般用来取它的值,所以可以看看这个值能不能取地址,是不是内存上的值来判断左值还是右值。

引用

说到引用无非就是一个别名,引用的前提是这个值必须存在,已经定义过了。左值引用就是给内存上的某个值取一个别名,然而右值不存在于内存上,我们说右值这个整体而不是一部分比如a+10;a是内存上的一个值但是这个整体被称为右值,没有在某一块内存上,像这样的一个临时的值我们该如何引用呢,基于节省内存的考量,右值引用就出现了。

左值引用:

int a = 10;

int& b = a;

右值引用:

int&& a = 10;

or:

int a = 11;

int&& b = a+1;

 

右值引用的规则是比左值引用多了一个&但是它可以直接引用一个不在一块内存上存放的右值。