左值与右值
首先,我们需要明确左值与右值的定义。
一个简单的理解就是,对于每个变量,均是可寻址的,均与两个值有关:
- 它的数据值——存储在某个内存空间中,不占有确定位置的表达式,被称为右值(rvalue)。
- 它的地址值——存储数据值的内存的地址,占有确定的位置,被称为左值(lvalue)。
i++不能作为左值的原因
int i = 0; i++=5;编译报错!
由于i++的内部实现是创建一个临时变量并返回,返回值不是可寻址变量的引用,不具备地址值,因而无法对其进行左值操作。
int temp = i;
i = i + 1;
return temp;
int i = 0; ++i=5;编译通过!i为5!
这是因为++i的内部实现是对变量i的运算,返回的是i的地址,可以作为左值。
i = i + 1;
return i;