【问题标题】:Different types of *-values [duplicate]不同类型的*值[重复]
【发布时间】:2011-07-15 22:56:16
【问题描述】:

可能重复:
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.

右值、左值、非右值、非左值有什么区别?

这种*值有多少种类型?我的意思是我也听说过 xvalues。

需要非常了解这一点。这些与临时变量和 lambda 有什么关系?

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

【问题讨论】:

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


【解决方案1】:

左值是可以出现在赋值的l左手边的东西。右值是可以出现在赋值的 r 右手边的东西。 this 是一个非左值表达式,在某种意义上,你不能分配给它:例如,你不能说 this = new Foo();

[编辑补充:上面的段落是错误的,尽管它可能是一个有用的助记符并且确实反映了该术语的起源。请参见下面的 cmets。然而,下面的参考是正确的。]

请参阅标准的第 3.10 节,至少如果我正在查看的草案具有代表性的话。 [basic.lval] 部分。它的开头是:“每个表达式要么是左值,要么是右值。”

这是现有标准中的内容。 C++0x 似乎可能会引入:xvalues、glvalues、prvalues。有关更多信息,请参阅What are rvalues, lvalues, xvalues, glvalues, and prvalues?

【讨论】:

  • 第一句话并不完全正确。还有一些不可修改的左值,比如数组,不能赋值。
  • 不正确。虽然名称的起源确实可以追溯到赋值的 LHS,但标准术语的定义与赋值的 LHS 完全无关。名称“lvalue”被追溯地重新解释为“location-lalue”。 IE。左值是在存储中具有位置(地址)的实体。这是针对 C 的。 C++ 对定义做了一些修改。
  • 哎呀,完全正确。投票当之无愧。感谢詹姆斯和安德烈的更正。
猜你喜欢
  • 2013-09-02
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
相关资源
最近更新 更多