我在xvalue
上阅读了标准。它与rvalue reference
表达密切相关。但是在编程时,我真的找不到需要xvalue
的场景。
例如:函数myClass&& f()
返回rvalue reference
。所以表达式f()
是xvalue。但这有用吗?如何在编程中使用这种技术?
如果定义了其他功能myClass g()
,g()
和f()
之间有什么区别?
在什么情况下我应该使用f() and xvalue
代替g() prvalue
?
答案 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。