众所周知,C++中的每条语句和表达式,其结果部分都分为左值与右值,而且要么是左值,要么就是右值。
左值、右值是很直观的表述——在表达式等号左边是就是左值,右边就是右值;等号左边往往是被赋值对象,右边往往是所赋的值。
因此,左值就应当被内存持续存储,而右值只是临时的存储对象。
然而,自增与自减两个运算符却很容易让人搞迷糊——a++与++a是不同的:
++a是一个左值,而a++是一个右值
这要怎么理解呢?
我们要知道,运算是有前后的,所以a++就是后自增运算,这意味着计算机会先给出a的当前值,然后再自增运算;++a则反过来
所以,因为a++给出的值是临时的,是“即将变化的”,所以它是一个右值;++a是已经完成运算的,是“不再变化的”,所以它是一个左值
明白这一点,有助于之后的循环结构搭建。