首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >临时结构是r值还是x值?

临时结构是r值还是x值?
EN

Stack Overflow用户
提问于 2021-02-04 14:31:21
回答 1查看 173关注 0票数 2

我想要澄清C++值类别。

代码语言:javascript
复制
struct Foo {...};
void do_something(Foo{});

上面的Foo{}是r值还是x值?

我知道有一个价值类别的层次结构,r-值实际上要么是x值,要么是pr值。我也知道标准上说“临时物化是一个x值”,但我不确定临时物化的创建是否符合这个定义。

但我不确定的是gl-value和r-value是否是层次结构中的“抽象”类别,而leafs (l-value、x-value和pr-value)是实际实现。

有人能给我解释一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-04 14:54:00

来自https://eel.is/c++draft/basic.lval (查阅日期: 04/02/2021):

每个表达式都属于这个分类法中的基本分类之一: lvalue、xvalue或prvalue。表达式的此属性称为其值类别。

这就回答了你的问题:gl值和r值是否是值的类别:它们是。

关于您的具体情况是什么类型的值,让我们来看看xvalue:

  • xvalue是一个glvalue,它表示可以重用其资源的对象(通常是因为它的生命周期已接近尾声)。

..。狙击..。

[注3:表达式如果为x值,则为:

  • (4.1)调用函数的结果,无论是隐式还是显式,其返回类型为对对象类型(expr.call)的rvalue引用,对象类型的rvalue引用(expr.type.conv、expr.dynamic.cast、expr.static.cast、expr.const.cast、expr.cast)的转换,对带有xvalue数组操作数(expr.sub)的订阅操作的
  • (4.3),(expr.mptr.oper).

  • (4.4)一个类成员访问表达式,其中指定一个非引用类型的非静态数据成员,其中对象表达式为xvalue (expr.ref),或

  • (4.5)为一个.*指针到成员表达式,其中第一个操作数为x值,第二个操作数为数据成员

  • 的指针。

你的案子似乎不符合其中任何一个。现在让我们看一下prvalue:

  • prvalue是一个表达式,其计算值初始化对象或计算操作符的操作数的值(如其出现的上下文所指定的)或具有cvvoid.

类型的表达式。

您的情况似乎正在初始化一个对象。出于这个原因,我想说这是一种价值。

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

https://stackoverflow.com/questions/66047692

复制
相关文章

相似问题

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