哪些右值有名称

What rvalues have names?

本文关键字:有名称      更新时间:2023-10-16

@FredOverflow在C++聊天室中提到,this是有名称的右值的罕见情况。5.1.1 [expr.prim.general] p4:下提到的C++0x FDIS

否则,如果成员声明符声明了类X的非静态数据成员(9.2),则表达式this是可选大括号或等号初始值设定项内类型为"pointer to X"的prvalue。它不应出现在成员声明书的其他地方(强调矿)

还有什么,如果有的话?

一个突出的例子是枚举器

enum arity { one, two };

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

template<int *P> struct A { };

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

  1. 布尔文字truefalse是布尔类型的prvalue
  2. CCD_ 9是CCD_
  3. 当您从函数返回命名变量时,它在该表达式的上下文中变为xvalue,而xvaluervalue(根据§3.10/1)

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