9

我在 上阅读了标准xvalue。它与rvalue reference表达密切相关。但是在编程的时候,真的找不到需要的场景xvalue

例如:函数myClass&& f()返回一个rvalue reference. 所以表达式f()是xvalue。但这有什么用?如何在编程中使用这种技术?

如果定义了另一个函数,和myClass g()有什么区别?g()f()

在什么情况下我应该使用f() and xvalue而不是g() prvalue

4

1 回答 1

11

在您的示例中,您定义了一个g返回纯右值的函数和一个f返回 xvalue 的函数。

它们的共同点是,如果您将函数调用的结果g()分别f()传递给另一个函数h(...),它们都会更喜欢将h右值作为参数的重载(如果有多个重载h)。

和之间的区别在于没有动态类型(即动态类型与静态(=声明的)类型相同),而具有动态类型(可能与静态类型不同),换句话说,如果它被定义为返回对基类的右值引用,它将启用多态行为。(正是这个特性,xvalues 与 lvalues 共享,这就是为什么 xvalues 和 lvalues 一起形成更大的 glvalues 组,而 prvalues只是rvalues。)g()f()g()f()

对于用例的示例,我将仅参考这个现有问题:在任何情况下,右值引用返回是有用的

于 2013-06-30T03:53:21.577 回答