lvalue和rvalue
C++中每个表达式的结果或者是lvalue,或者是rvalue。有时,它们也分别写作l-value和r-value,
但读音不变。lvalue指的是内存中持续存储数据的一个地址。而rvalue是临时存储的表达式结果。
之所以称为lvalue,是因为所有产生lvalue的表达式都可以出现在赋值语句中等号的左边。如果表
达式结果不是lvalue,则它是rvalue。
考虑下面的语句:
int a(0), b(1), c(2);
a = b + c;
b = ++a;
c = a++;
第一条语句声明类型为int的变量a、b和c,并分别初始化为0、1和2。在第二条语句中,求
表达式b+c的值,结果存储在变量a中。表达式b+c的结果临时存储在一个内存位置中,并将此b+c
的值从这一位置赋值到a。一旦此语句执行完毕,则丢弃存储b+c结果的内存位置。因此,表达式
b+c的结果是一个rvalue。
在第三条语句中,表达式++a是一个lvalue,因为它的结果是递增之后的a。第四条语句中的表
达式a++是一个rvalue,因为它临时将a的值存储为表达式的结果,然后递增a。
只包含一个命名变量的表达式始终是lvalue。