zoukankan      html  css  js  c++  java
  • C++ > 右值引用和左值引用的区别

    右值引用和左值引用有什么区别?
    右值引用,是只能绑定到右值的引用,通过&&获得,只能绑定到即将销毁的对象上(如字面量,临时计算结果,函数返回值,无名对象)。通过右值引用可以自由地移动绑定的资源。
    返回右值的包括非引用类型的函数及算术、关系、位、后置递增/递减运算符。

    右值引用的对象是短暂的,即将销毁的。

    int a = 2;
    int &&r1 = 10; // 正确,右值引用可以绑定字面量
    int &&r2 = a;  // 错误,带类型的变量不是右值
    int &&r3 = std::move(a); // 正确,std::move能将左值转换成右值引用类型
    int &&r4 = a * 10; // 正确,临时计算结果是右值
    int &&r5 = *(new int(2)); // 错误, 不能绑定int型左值
    int &&r6 = std::move(*new int(10)); // 正确,std::move能将左值转换成右值引用类型
    

    左值引用,是常规引用,不能绑定到要转换的表达式、字面量或返回右值的表达式。返回左值的表达式包括返回左值引用的函数及赋值、下标、解引用、前置递增/递减运算符。
    左值引用的对象是持久的,不会马上销毁。

    int &rr1 = a;
    int &rr2 = 1; // 错误
    int &rr3 = std::max(10,20); // 错误
    vector<int> vec = {1,2,3,4};
    int &rr4 = vec[2];
    int &rr5 = a * 10; // 错误
    int &rr6 = *new int(10); 
    
  • 相关阅读:
    gdb常用命令
    gdb之watch命令
    gdb之x命令
    python's descriptor II
    MacOSX快捷键
    主题敏感词PageRank
    shell调试选项
    shell输出调试信息
    事务时间如何去掉wasted time
    深刻剖析VuGen脚本录制原理
  • 原文地址:https://www.cnblogs.com/fortunely/p/14539443.html
Copyright © 2011-2022 走看看