不同类型的*值

时间:2011-03-15 16:40:46

标签: c++ c++11 expression rvalue lvalue

  

可能重复:
  What are rvalues, lvalues, xvalues, glvalues, and prvalues?

The standard states:
3.2 The this pointer 
1 In the body of a non-static (9.3) member function, 
the keyword this is a non-lvalue expression whose value is the address of the 
object for which the function is called.

rvalue,lvalue,non-rvalue,non-lvalue有什么区别?

有多少种类型的*值?我的意思是我也听到了xvalues。

需要了解这一点。这些与临时和羔羊有什么关系?

对不起,如果我听起来重复,困惑,矛盾和冗余。

1 个答案:

答案 0 :(得分:-2)

左值可以出现在作业的 l 后方。右值可以出现在作业的 r 右侧。 this是一个非左值表达式,因为您不允许分配给它:例如,您不能说this = new Foo();

[编辑补充:以上段落是错误的,虽然它可能是一个有用的助记符,但确实反映了该术语的起源。见下面的评论。但是,下面的参考文献是正确的。]

参见标准第3.10节,至少如果我所看的草案具有代表性。部分[basic.lval]。它开始:“每个表达式都是左值或左值。”

这是现有标准。 C ++ 0x似乎可能会引入:xvalues,glvalues,prvalues。有关详细信息,请参阅What are rvalues, lvalues, xvalues, glvalues, and prvalues?