C++ 哪些右值有名称?
C++ 哪些右值有名称?,c++,c++11,named,rvalue,C++,C++11,Named,Rvalue,这个是具有名称的右值的罕见情况。5.1.1[expr.prim.general]p4中提到了C++0x FDIS: 否则,如果成员声明符声明类X的非静态数据成员(9.2),表达式this是可选大括号或等效初始值设定项中“指向X的指针”类型的PR值。不得出现在成员声明书的其他地方。(强调矿山) 还有什么其他的,如果有的话 布尔文本true和false是bool类型的PR值 nullptr是类型为nullptr\u t的PR值 从函数返回命名变量时,该变量在该表达式的上下文中变为xvalue,xva
这个
是具有名称的右值的罕见情况。5.1.1[expr.prim.general]p4
中提到了C++0x FDIS:
否则,如果成员声明符声明类X的非静态数据成员(9.2),表达式this
是可选大括号或等效初始值设定项中“指向X的指针”类型的PR值。不得出现在成员声明书的其他地方。(强调矿山)
还有什么其他的,如果有的话
true
和false
是bool类型的PR值nullptr
是类型为nullptr\u t
的PR值xvalue
,xvalue
为rvalue
(根据§3.10/1)可能还有更多,但这些是我目前所能想到的(第三个是有问题的——它实际上是一个表达式,它是xvalue,但有一些类似于
return x;
(其中x
是一个局部变量,您返回的是值,而不是引用),变量的名称是表达式。该名称实际上指的是一个glvalue,在表达式中,该值(但不是真正的名称)被转换为一个xvalue(这是一个右值)。一个突出的例子是枚举数
enum arity { one, two };
表达式one
和two
是右值(更具体地说,是C++0x中的prvalue)。另一个是模板非类型参数
template<int *P> struct A { };
模板结构A{};
表达式
p
也是一个右值(更具体地说,是C++0x中的一个PR值).第三点仅适用于由值返回的局部变量。即使如此,表达式仍然是左值,但有一种特殊的语言规则,它将对象视为由右值指定的对象。@FredOverflow:是的--我编辑了一段,提到它必须是局部变量才能应用任何这些值(正如我所说的,我同意第三个是有问题的)。从技术上讲,这个
,真的
,和假的
都不是名字。它们是构成有效右值表达式的标记,恰巧看起来像标识符。用标准引号来支持这一点?(我知道你有一个,不要对我隐瞒!:)
)@Xeo是5.1.1p8和14.1p6