• a++ 和 ++a 的区别


    a++ 和 ++a 的区别

    1)首先说左值和右值的定义:
            变量和文字常量都有存储区,并且有相关的类型。区别在于变量是可寻址的(addressable)对于每一个变量都有两个值与其相联:
                    1).它的数据值,存储在某个内存地址中。有时这个值也被称为对象的右值(rvalue,读做are-value).我们也可认为右值的意思是被读取的值(read value)。文字常量和变量都可被用作右值
                    2).它的地址值——即存储数据值的那块内存的地址。它有时被称为变量的左值(lvalue,读作ell-value)。我们也可认为左值的意思是位置值(location value)。文字常量不能被用作左值

    (2) 首先对于a++的实现是:
            int temp;
            temp = a;
            a   = a+1;
            return temp;  // 返回的是编译器自动分配的临时变量temp,而这个temp并不是你程序中定义的可寻址变量的引用 ,也就是说你不能通过地址对temp进行操作.(换句话说就是不能作为左值),因为temp是一个临时变量。

    而++a的实现是:
            a = a+1;
            return a;  // 返回值就是a

    所以 a++ = 5 是错误的。而 ++a = 5 是正确的。

    a++和++a在做左值的时候有不同,那么左值它首先必须是有特定地址的才能作为左值,否则赋值就没有具体对象。
    a++的意思是先复制一份临时数据出来参与周边环境的运算,再自加变量a,可见a++用来参与运算的是一份复制出来的临时数据,这个数据是临时存在而没有固定地址的,不是一个真正的变量。
    ++a的意思是先自加变量a,再将变量放到周边环境参与运算,那么++a用来参与运算的是有具体地址的变量,所以++a是可以作为左值使用的。
    在具体一点可以理解为:
    a++返回一个临时变量
    ++a返回变量的引用

    a++,a自增1,返回a自增之前的值(右值)
    ++a,a自增1,返回自增之后的a(左值)
    你需要自己明确三个概念:表达式的返回值、左值、右值

  • 相关阅读:
    QT项目之创建.pri文件
    QT中使用pri子工程
    foreach
    Qt--解析Json
    C++构造函数的default和delete
    QVariantMap 和 QVariant
    __attribute__中constructor和destructor
    唯品会
    获取图片和下载到本地和名字和链接的获取
    python实现屏幕截图
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7944435.html
Copyright © 2020-2023  润新知