C++11 中的右值引用和移动语义

2020-06-24  本文已影响0人  pluto_S

简单理解

左值相当于地址值
右值相当于数据值。右值指的是引用了一个存储在某个内存地址里的数据。

左值和右值是相对于赋值表达式而言的。左值是能出现在赋值表达式左边的表达式。左值表达式可以分为可读写的左值和只读左值。右值是可以出现在赋值表达式右边的表达式,他可以是不占据内存空间的临时量或字面量,可以是不具有写入权的空间实体

int a=1;// a为左值,1为右值
const int b=5;
a=b+2; //a是左值,b+2是右值
b=a+2; //错!b是只读的左值但无写入权,不能出现在赋值符号左边
(a=4)+=28; //a=4是左值表达式,28是右值,+=为赋值操作符
34=a+2; //错!34是字面量不能做左值

右值引用

通过&&获取右值,右值一般表示的是对象的值

int i=42;
int &r=i;   //正确,r引用i
int &&rr=i   //错误,不能将一个右值引用绑定到一个左值上
int &r2=i*42;  //错误,i*42是一个右值
const int &r3=i*42;  //正确,我们可以将一个const的引用绑定到一个右值上
int &&r2=i*42; //正确,将rr2绑定到乘法结果上

移动

右值的接管通过 std::move()来实现右值的

上一篇 下一篇

猜你喜欢

热点阅读