2011-05-28 57 views
13

@FredOverflow mentioned in the C++ chatroomthis是一個罕見的有姓名的右值。所述的C++ 0x FDIS提到下5.1.1 [expr.prim.general] p4rvalues有什麼名字?

否則,如果一個成員聲明符聲明一個類X的非靜態數據成員(9.2),表達this是類型的指針」,以一prvalue X「在可選的括號或等同初始值設定項中。它不應出現在成員申報人的其他地方。 (強調我的)

其他人在那裏,如果有?

+4

從技術上講,'this','true'和'false'不是名稱。它們是形成有效右值表達式並且看起來像標識符的令牌。 – aschepler 2011-05-28 21:25:59

回答

8

一個突出的例子是普查員

enum arity { one, two }; 

表達式onetwo是rvalues(更具體地說,是C++ 0x中的prvalues)。另一個是模板非類型參數

template<int *P> struct A { }; 

表達P是一個rvalue太(更具體地再次,在C++ 0X一個prvalue)。

+0

標準報價來支持? (我知道你有一個,不要把它藏起來!':)') – Xeo 2011-05-28 21:39:07

+0

@Xeo它在5.1.1p8和14.1p6 – 2011-05-28 22:06:13

8
  1. 布爾文字truefalse是bool類型的prvalues。
  2. nullptr是類型nullptr_t的估價。
  3. 當您從函數返回指定變量時,它將在該表達式的上下文中變爲xvalue,而xvaluervalue(根據§3.10/ 1)。

可能有更多,但這些都是我當時可以想到的(第三個是有問題的 - 這真的是這樣的x值的表達,但像return x;(其中x是一個局部變量並且你正在返回值,而不是引用),變量的名稱是表達式。該名稱實際上是指glvalue,並且在表達式中值(但不是真正的名稱)被轉換爲xvalue (這是一個右值)

+1

D'oh!當然是'true'和'false'! – Xeo 2011-05-28 15:07:08

+0

第三點只適用於由值返回的局部變量。即使如此,表達式仍然是一個左值,但是有一條特殊的語言規則將對象*當作是由右值指定的。 – fredoverflow 2011-05-28 15:20:40

+0

@FredOverflow:是的 - 我提到它必須是本地適用的任何一個(並且正如我所說的,我同意第三個問題無論如何都是可疑的)。 – 2011-05-28 16:07:39

相關問題