• c++中的左值和右值的理解


    1、左值和右值的概念

    C++中左值(lvalue)和右值(rvalue)是比较基础的概念,虽然平常几乎用不到,但C++11之后变得十分重要,它是理解 move/forward 等新语义的基础。

    左值与右值这两个概念是从 C 中传承而来的,左值指既能够出现在等号左边,也能出现在等号右边的变量右值则是只能出现在等号右边的变量。

    int a; // a 为左值
    a = 3; // 3 为右值
    
    • 左值是可寻址的变量,有持久性;
    • 右值一般是不可寻址的常量,或在表达式求值过程中创建的无名临时对象,短暂性的。

    左值和右值主要的区别之一是左值可以被修改,而右值不能。

    2、左值引用和右值引用

    • 左值引用:引用一个对象;(左值可以被引用)
    • 右值引用:就是必须绑定到右值的引用,C++11中右值引用可以实现“移动语义”,通过 && 获得右值引用。(右值被引用时需要特殊的方式下面有介绍)
    int x = 6; // x是左值,6是右值
    int &y = x; // 左值引用,y引用x
    
    int &z1 = x * 6; // 错误,x*6是一个右值
    const int &z2 =  x * 6; // 正确,可以将一个const引用绑定到一个右值
    
    int &&z3 = x * 6; // 正确,右值引用
    int &&z4 = x; // 错误,x是一个左值
    

    右值引用和相关的移动语义是C++11标准中引入的最强大的特性之一,通过std::move()可以避免无谓的复制,提高程序性能。

  • 相关阅读:
    单片机学习01__跑起你的流水灯
    python2与python3共存
    rpi-kali 搭建网络靶场
    P3388 【模板】割点(割顶)
    P3387 【模板】缩点
    P1069 细胞分裂
    The Unique MST[不严格的次小生成树]
    P3369 【模板】普通平衡树
    Netty的线程模型可不是Reactor这么简单
    SpringBoot+Mybatis+MySQL实现读写分离
  • 原文地址:https://www.cnblogs.com/zhj868/p/14200280.html
Copyright © 2020-2023  润新知