@FredOverflow mentioned in the C++ chatroomthis
是一個罕見的有姓名的右值。所述的C++ 0x FDIS提到下5.1.1 [expr.prim.general] p4
:rvalues有什麼名字?
否則,如果一個成員聲明符聲明一個類X的非靜態數據成員(9.2),表達
this
是類型的指針」,以一prvalue X「在可選的括號或等同初始值設定項中。它不應出現在成員申報人的其他地方。 (強調我的)
其他人在那裏,如果有?
@FredOverflow mentioned in the C++ chatroomthis
是一個罕見的有姓名的右值。所述的C++ 0x FDIS提到下5.1.1 [expr.prim.general] p4
:rvalues有什麼名字?
否則,如果一個成員聲明符聲明一個類X的非靜態數據成員(9.2),表達
this
是類型的指針」,以一prvalue X「在可選的括號或等同初始值設定項中。它不應出現在成員申報人的其他地方。 (強調我的)
其他人在那裏,如果有?
一個突出的例子是普查員
enum arity { one, two };
表達式one
和two
是rvalues(更具體地說,是C++ 0x中的prvalues)。另一個是模板非類型參數
template<int *P> struct A { };
表達P
是一個rvalue太(更具體地再次,在C++ 0X一個prvalue)。
標準報價來支持? (我知道你有一個,不要把它藏起來!':)') – Xeo 2011-05-28 21:39:07
@Xeo它在5.1.1p8和14.1p6 – 2011-05-28 22:06:13
true
和false
是bool類型的prvalues。nullptr
是類型nullptr_t
的估價。xvalue
,而xvalue
爲rvalue
(根據§3.10/ 1)。可能有更多,但這些都是我當時可以想到的(第三個是有問題的 - 這真的是這樣的x值的表達,但像return x;
(其中x
是一個局部變量並且你正在返回值,而不是引用),變量的名稱是表達式。該名稱實際上是指glvalue,並且在表達式中值(但不是真正的名稱)被轉換爲xvalue (這是一個右值)
D'oh!當然是'true'和'false'! – Xeo 2011-05-28 15:07:08
第三點只適用於由值返回的局部變量。即使如此,表達式仍然是一個左值,但是有一條特殊的語言規則將對象*當作是由右值指定的。 – fredoverflow 2011-05-28 15:20:40
@FredOverflow:是的 - 我提到它必須是本地適用的任何一個(並且正如我所說的,我同意第三個問題無論如何都是可疑的)。 – 2011-05-28 16:07:39
從技術上講,'this','true'和'false'不是名稱。它們是形成有效右值表達式並且看起來像標識符的令牌。 – aschepler 2011-05-28 21:25:59