3

https://stackoverflow.com/a/3601661/368896和其他人提供了lvaluervalue(参考标准)的定义,以及xvalueglvalueprvalue

但是, 的定义是rvalue指 的定义xvalue,而 的定义是xvalue指“涉及右值引用的某些类型的表达式的结果”。

因此,要理解 的技术定义rvalue,必须确定上述定义中提到了哪些“涉及右值引用的表达式”。我花时间尝试遵循标准(和不同的帖子)来跟踪这个定义。我想要一个不需要跟踪其他定义的定义(更明显的低级定义除外)。

这是一场野鹅追逐吗?是否有可能对右值表达式和左值表达式之间的区别提供一个简洁但严格的定义,涵盖所有可能的情况,并且不提及“涉及右值引用的某些类型的表达式的结果”?如果是这样,这样的定义是什么?

4

1 回答 1

2

什么构成右值是由一组特别规则定义的,所以我认为“简洁”是不可能的。

xvalues 相当简单:它们是“返回 a 的东西T&&”。这包括返回它的函数、显式转换为T&&、通过 a 访问类数据成员T&&(无论是直接还是通过指向数据成员的指针)。

问题是prvalues,到处都是。您可以大致了解它们是什么,但具体涉及许多临时规则。return valueArgument;就像可以认为是纯右值的事实一样valueArgument,即使它在其他任何地方都是左值。

基本上,标准委员会通过标准并寻找他们想要隐含移动的地方,然后说,“你是一个prvalue。”

因此,不太可能出现“简洁但严格”的定义。

于 2013-03-10T22:17:18.413 回答