我在 上阅读了标准xvalue
。它与rvalue reference
表达密切相关。但是在编程的时候,真的找不到需要的场景xvalue
。
例如:函数myClass&& f()
返回一个rvalue reference
. 所以表达式f()
是xvalue。但这有什么用?如何在编程中使用这种技术?
如果定义了另一个函数,和myClass g()
有什么区别?g()
f()
在什么情况下我应该使用f() and xvalue
而不是g() prvalue
?
在您的示例中,您定义了一个g
返回纯右值的函数和一个f
返回 xvalue 的函数。
它们的共同点是,如果您将函数调用的结果g()
分别f()
传递给另一个函数h(...)
,它们都会更喜欢将h
右值作为参数的重载(如果有多个重载h
)。
和之间的区别在于没有动态类型(即动态类型与静态(=声明的)类型相同),而具有动态类型(可能与静态类型不同),换句话说,如果它被定义为返回对基类的右值引用,它将启用多态行为。(正是这个特性,xvalues 与 lvalues 共享,这就是为什么 xvalues 和 lvalues 一起形成更大的 glvalues 组,而 prvalues只是rvalues。)g()
f()
g()
f()
对于用例的示例,我将仅参考这个现有问题:在任何情况下,右值引用返回是有用的。