2011-03-15 31 views
1

可能重複:
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。

需要了解這一點。這些與臨時和lambdas有什麼關係?

對不起,如果我聽起來重複,困惑,矛盾和多餘。

+0

重複http://stackoverflow.com/questions/3601602/what-are-rvalues-lvalues-xvalues-glvalues-and-prvalues – 2011-03-15 16:43:44

回答

-2

左值是可以出現在任務的右手邊的東西。右值是可以出現在任務的右手邊的東西。 this是一個非左值表達式,您不允許指定它:例如,您不能說this = new Foo();

[編輯補充:上面的段落是錯誤的,雖然它可能是一個有用的助記符,並且確實反映了術語的起源。見下面的評論。但是,下面的參考文獻是正確的。]

請參閱標準的第3.10節,至少如果我所看到的草案是有代表性的話。部分[basic.lval]。它開始於:「每個表達式都是左值或右值。」

這是在現有的標準。 C++ 0x似乎可能會引入:xvalues,glvalues,prvalues。請參閱What are rvalues, lvalues, xvalues, glvalues, and prvalues?瞭解更多信息。

+1

第一句話並不完全正確。還有不可修改的左值,如數組,不能分配給。 – 2011-03-15 16:52:29

+2

不正確。雖然名稱的起源確實可以追溯到任務的LHS,但標準術語的定義與LHS的任務完全無關。 「左值」這個名稱被追溯地重新解釋爲「位置 - 拉魯」。即左值是一個存儲位置(地址)的實體。這是爲了C雖然。 C++對定義進行了一些更改。 – AnT 2011-03-15 17:20:38

+0

哎呀,很對。 Downvote富有當之無愧。感謝更正,詹姆斯和安德烈。 – 2011-03-15 17:42:00