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。

posted on 2014-03-03 21:27  混元真人  阅读(274)  评论(0编辑  收藏  举报