哪些右值有名称?
@FredOverflow 在 C++ 聊天室中提到 这是右值的罕见情况有名字的。 C++0x FDIS 在
5.1.1 [expr.prim.general] p4
下提到:
否则,如果成员声明符声明类 X 的非静态数据成员 (9.2),表达式
this
是“指向 X 的指针”类型的纯右值。它不得出现在成员声明符的其他位置。 (强调我的)
还有哪些其他的(如果有的话)?
@FredOverflow mentioned in the C++ chatroom that this
is a rare case of rvalues that have names. The C++0x FDIS mentions under 5.1.1 [expr.prim.general] p4
:
Otherwise, if a member-declarator declares a non-static data member (9.2) of a class X, the expression
this
is a prvalue of type “pointer to X” within the optional brace-or-equal-initializer. It shall not appear elsewhere in the member-declarator. (emphasis mine)
What others are there, if any?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
一个突出的例子是枚举器
表达式
one
和two
是右值(更具体地说,是 C++0x 中的纯右值)。另一个是模板非类型参数表达式
P
也是一个右值(更具体地说,是 C++0x 中的纯右值)。One prominent case are enumerators
The expressions
one
andtwo
are rvalues (more specifically, prvalues in C++0x). Another are template non-type parametersThe expression
P
is an rvalue too (more specifically again, a prvalue in C++0x).true
和false
是 bool 类型的纯右值。nullptr
是nullptr_t
类型的纯右值。xvalue
,而xvalue
是一个rvalue
(每个§3.10/1)。可能还有更多,但目前我能想到的只有这些(第三个是有问题的 - 它实际上是 xvalue 的表达式,但带有类似
return x;
(其中>x
是一个局部变量,您返回的是值,而不是引用),变量的名称是表达式该名称实际上引用了泛左值,并且在值(但不是真正的名称)转换为的表达式xvalue(即右值)。true
andfalse
are prvalues of type bool.nullptr
is a prvalue of typenullptr_t
.xvalue
in the context of that expression, and anxvalue
is anrvalue
(per §3.10/1).There may be more, but those are all I can think of at the moment (and the third is questionable -- it's really the expression that's the xvalue, but with something like
return x;
(wherex
is a local variable and you're returning the value, not a reference), the name of the variable is the expression. The name really refers to a glvalue, and in the expression that value (but not really the name) gets converted to an xvalue (which is an rvalue).