美文网首页
C++11 中的右值引用和移动语义

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

作者: pluto_S | 来源:发表于2020-06-24 14:07 被阅读0次

    简单理解

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

    • L-value中的L指的是Location,表示可寻址。Avalue (computer science)that has an address.
    • R-value中的R指的是Read,表示可读。in computer science, a value that does not have an address in a computer language.

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

    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()来实现右值的

    相关文章

      网友评论

          本文标题:C++11 中的右值引用和移动语义

          本文链接:https://www.haomeiwen.com/subject/wijatktx.html