为什么在提到纯右值时在这里使用术语“对象”?

big*_*iao 5 c++ language-lawyer semantics c++17 value-categories

据我所知,在 c++17 中,纯右值的概念/语义不再是临时对象,因此在许多情况下强制执行复制省略。

然而,今天我遇到了return 表达式的描述

如果表达式是纯右值,则函数返回的对象将直接由该表达式初始化。当类型匹配时,这不涉及复制或移动构造函数

为什么“对象一词出现在这里?在值类别中,不是引用类型的函数的返回属于纯右值,所以我认为使用术语对象可能是不合适的。

根据我的理解,纯右值现在不再是对象,它们只是值,对吗?

作为补充,这里也使用术语“对象”。

Joh*_*itb 6

我同意你的说法。cppreference 上有一个讨论页面,您可以在其中提出您的疑虑。更好的表达方式可能是

如果表达式是纯右值,则表达式的结果对象直接由该表达式初始化。

正如您所说,对象不再由纯右值返回或传递。

  • @bigxiao参见http://eel.is/c++draft/expr#basic.lval-5.sentence-3。纯右值的结果对象可能有多个初始化它的纯右值。因此,我们不能指向纯右值并说它“创建”了一个对象。创建是由提供结果对象的人完成的。 (2认同)