13
4

2 回答 2

9

一个突出的案例是枚举器

enum arity { one, two };

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

template<int *P> struct A { };

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

于 2011-05-28T21:17:16.460 回答
8
  1. 布尔文字truefalse是布尔类型的纯右值。
  2. nullptr是类型的prvalue nullptr_t
  3. 当您从函数返回命名变量时,它xvalue在该表达式的上下文中变为 an,并且 anxvalue是 an rvalue(根据 §3.10/1)。

可能还有更多,但目前我能想到的只有这些(第三个是有问题的——它实际上是 xvalue 的表达式,但有类似的东西return x;(哪里x是局部变量,你正在返回值,不是引用),变量的名称表达式。名称实际上是指一个glvalue,并且在表达式中该值(但不是真正的名称)被转换为一个xvalue(它是一个右值)。

于 2011-05-28T15:04:14.787 回答