rvalues有什么名字?

时间:2011-05-28 14:28:32

标签: c++ c++11 named rvalue

@FredOverflow mentioned in the C++ chatroom this是极少数具有名称的右值的情况。 C ++ 0x FDIS在5.1.1 [expr.prim.general] p4

下提及
  

否则,如果一个成员声明符声明一个类X的非静态数据成员(9.2),表达式this是一个类型为“指向X的指针”的prvalue可选的括号或等号初始化器。它不应出现在成员声明者的其他地方。 (强调我的)

其他人在哪里,如果有的话?

2 个答案:

答案 0 :(得分:9)

一个突出的案例是调查员

enum arity { one, two };

表达式onetwo是rvalues(更具体地说,是C ++ 0x中的prvalues)。另一个是模板非类型参数

template<int *P> struct A { };

表达式P也是一个右值(更具体地说,是C ++ 0x中的prvalue)。

答案 1 :(得分:8)

  1. 布尔文字truefalse是bool类型的prvalues。
  2. nullptrnullptr_t类型的prvalue。
  3. 当您从函数返回命名变量时,它在该表达式的上下文中变为xvalue,而xvaluervalue(根据§3.10/ 1)。
  4. 可能会有更多,但这些都是我现在能想到的(第三个是值得怀疑的 - 它实际上是xvalue的表达式,但有return x;之类的东西(其中x }是一个局部变量而你正在返回值,而不是引用),变量的名称是表达式。名称实际上是指一个glvalue,并且在表达式中是指值(但是不是真正的名称)被转换为xvalue(这是一个右值)。