一,右值的基本概念
左值是可以被获取地址的变量,经常出现在赋值语句的左边。
不属于左值的变量都是右值变量,经常出现在赋值语句的右边,例如:字面量,临时对象,临时值。
有名称的变量是左值,没有名称的变量比如"3+4"是右值。
从生命周期看,左值变量是一个持久的变量,在代码运行期间会一直存在,右值变量是一个临时的变量,在代码运行期间会被释放。
右值变量之所以是临时的,是因为一些字面量,表达式计算出来的中间变量、临时对象等都是临时的,使用完就要被销毁。
举个例子:
int a = 40
a:左值,可以获取a的地址:&a。
40:整型字面量,是个临时值,右值变量,不能被获取地址,编码时不能写&40。
二,右值引用的基本概念
右值引用,其实就是字面上说的,针对右值变量的引用。
引用的含义和别名差不多,左值引用通常被理解为左值变量的别名,那么右值引用也可以被理解为右值变量的别名。
右值引用,只针对特别的右值变量,比如临时对象,而字面量等形式的右值变量依旧无法被引用。
大多数情况下,右值引用只能绑定到一个将要被销毁的对象上。
右值引用还可以引用一个临时的表达式结果,只要右值引用还在作用域内,那么这个临时变量就不会被马