使用xvalue的地点和时间?

时间:2013-06-30 03:27:55

标签: c++ reference xvalue

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

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

如果定义了其他功能myClass g()g()f()之间有什么区别?

在什么情况下我应该使用f() and xvalue代替g() prvalue

1 个答案:

答案 0 :(得分:7)

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

这些在 common 中的含义是,如果您将函数调用的结果g()f()分别传递给另一个函数h(...),将更喜欢以{rvalue为参数的h的重载(如果有h的多个重载)。

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

有关用例的示例,我将仅提及此问题:Is there any case where a return by rvalue reference is useful