哪些右值有名称?

发布于 2024-11-10 23:08:05 字数 424 浏览 3 评论 0原文

@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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蛮可爱 2024-11-17 23:08:05

一个突出的例子是枚举器

enum arity { one, two };

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

template<int *P> struct A { };

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

One prominent case are enumerators

enum arity { one, two };

The expressions one and two are rvalues (more specifically, prvalues in C++0x). Another are template non-type parameters

template<int *P> struct A { };

The expression P is an rvalue too (more specifically again, a prvalue in C++0x).

荒路情人 2024-11-17 23:08:05
  1. 布尔文字 truefalse 是 bool 类型的纯右值。
  2. nullptrnullptr_t 类型的纯右值。
  3. 当您从函数返回命名变量时,它在该表达式的上下文中成为一个 xvalue,而 xvalue 是一个 rvalue(每个§3.10/1)。

可能还有更多,但目前我能想到的只有这些(第三个是有问题的 - 它实际上是 xvalue 的表达式,但带有类似 return x; (其中 >x 是一个局部变量,您返回的是值,而不是引用),变量的名称​​是表达式该名称实际上引用了泛左值,并且在值(但不是真正的名称)转换为的表达式xvalue(即右值)。

  1. The boolean literals true and false are prvalues of type bool.
  2. nullptr is a prvalue of type nullptr_t.
  3. When you return a named variable from a function, it becomes an xvalue in the context of that expression, and an xvalue is an rvalue (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; (where x 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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文