首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中的xvalue是什么?

C++中的xvalue是什么?
EN

Stack Overflow用户
提问于 2019-11-05 01:14:32
回答 2查看 638关注 0票数 4

我试图了解不同的价值类别,我发现了微软的本文件

代码语言:javascript
复制
- An xvalue is a glvalue that [...]
- An lvalue is a glvalue that is not an xvalue.
- An rvalue is a prvalue or an xvalue.

为什么xvalueglvalue?他们为什么不说An xvalue is an glvalue or an rvalue?在我看来,这个短语是有意表达的,但我不明白为什么

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-05 01:52:23

为什么他们不说xvalue是一个glvalue还是rvalue?

因为rvalue尚未定义,而且rvalue将被定义为xvalue。其中一项必须在不依赖另一项的情况下加以界定,以避免定义成为循环。

还因为xvalue既是一个glvalue,也是一个,而是一个rvalue。

此外,xvalue是一个glvalue,而不是lvalue。此外,xvalue是一个不是prvalue的rvalue。最后,xvalue是一个既不是lvalue也不是prvalue的表达式。

我不明白为什么他们在那句话里只提到格伦茨

只定义了glvalue和prvalue。参见前面提到的避免循环定义。

C++中的xvalue是什么?

你看过它的定义了。该标准有以下非规范性说明,提供了进一步的信息:

basic.lval注释:表达式如果为xvalue,则为xvalue:

  • 调用函数的结果,无论是隐式的还是显式的,其返回类型是对对象类型(expr.call)的rvalue引用,
  • 转换为对对象类型的rvalue引用(expr.type.conv、expr.dynamic.cast、expr.static.cast、expr.const.cast、expr.cast),
  • 具有xvalue数组操作数(expr.sub)的订阅操作,
  • 指定非引用类型的非静态数据成员的类成员访问表达式,其中对象表达式为xvalue (expr.ref),或
  • 一个.*指针到成员的表达式,其中第一个操作数是一个xvalue,第二个操作数是指向数据成员的指针(expr.mptr.oper)。
票数 2
EN

Stack Overflow用户

发布于 2019-11-05 01:37:27

这张图表可能有误导性。

有lvalue,xvalue和prvalue。它们是排他性和完全性的,也就是说,每个表达式都恰好是: lvalue、xvalue或prvalue之一。

lvalues和xvalue统称为glvalue。

X值和prvalue统称为rvalue。

所以x值既是值又是r值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58703140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档