c++ 如何使用[expr]/7推断命名的右值引用应该被视为左值?

piztneat  于 2023-05-02  发布在  其他
关注(0)|答案(1)|浏览(125)

在[expr]/7中,我们可以看到:
一般来说,这条规则的效果是,对对象的命名右值引用被当作左值,对对象的未命名右值引用被当作xvalue;函数的右值引用被视为左值,无论是否命名。
我想知道我如何从这个规则中推导出,命名的右值引用应该被视为左值?顺便说一句,我认为案文在使用上述`本规则'一词时指的是[expr]/7。

qojgxg4l

qojgxg4l1#

在您参考的N4527中,您可以在[expr.第8条:

  • identifier* 是一个 id-expression,前提是它已经被适当地声明(第7条)。[...]表达式的类型是 identifier 的类型。结果是由标识符表示的实体。如果实体是函数、变量或数据成员,则结果为左值,否则为纯右值。

因此,即使声明的类型是右值引用,变量的名称也总是左值。如果你在类作用域中引用一个非静态的数据成员,并且声明了类型右值引用,那么关于数据成员的部分就适用;在这种情况下也会得到左值。

相关问题