@FredOverflow mentioned in the C++ chatroom this
是极少数具有名称的右值的情况。 C ++ 0x FDIS在5.1.1 [expr.prim.general] p4
:
否则,如果一个成员声明符声明一个类X的非静态数据成员(9.2),表达式
this
是一个类型为“指向X的指针”的prvalue可选的括号或等号初始化器。它不应出现在成员声明者的其他地方。 (强调我的)
其他人在哪里,如果有的话?
答案 0 :(得分:9)
一个突出的案例是调查员
enum arity { one, two };
表达式one
和two
是rvalues(更具体地说,是C ++ 0x中的prvalues)。另一个是模板非类型参数
template<int *P> struct A { };
表达式P
也是一个右值(更具体地说,是C ++ 0x中的prvalue)。
答案 1 :(得分:8)
true
和false
是bool类型的prvalues。nullptr
是nullptr_t
类型的prvalue。xvalue
,而xvalue
是rvalue
(根据§3.10/ 1)。 可能会有更多,但这些都是我现在能想到的(第三个是值得怀疑的 - 它实际上是xvalue的表达式,但有return x;
之类的东西(其中x
}是一个局部变量而你正在返回值,而不是引用),变量的名称是表达式。名称实际上是指一个glvalue,并且在表达式中是指值(但是不是真正的名称)被转换为xvalue(这是一个右值)。