我阅读了有关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

10-08 09:29