我阅读了有关xvalue
的标准。它与rvalue reference
表达式紧密相关。但是在编程时,我真的找不到需要xvalue
的方案。
例如:function myClass&& f()
返回rvalue reference
。因此表达式f()
是xvalue。但是,这有什么用呢?如何在编程中使用这种技术?
如果定义了另一个函数myClass g()
,g()
和f()
有什么区别?
在什么情况下应该使用f() and xvalue
而不是g() prvalue
?
最佳答案
在您的示例中,您定义了一个返回prvalue的函数g
和一个返回xvalue的函数f
。
它们的共同点是,如果您分别将函数调用的结果g()
和f()
传递给另一个函数h(...)
,则它们都将更喜欢以rvalue作为参数的h
重载(如果h
有多个重载) 。g()
和f()
之间的区别在于g()
没有动态类型(即,动态类型与静态(=声明的)类型相同),而f()
具有动态类型(可能与静态类型不同),换句话说,如果它被定义为返回对基类的右值引用,它将启用多态行为。 (正是xvalue与lvalues共享的这一特征,这就是为什么xvalues和lvalues一起构成较大的glvalues组,而prvalues只是rvalues的原因。)
有关用例的示例,我将仅提及这个现有问题:Is there any case where a return by rvalue reference is useful。