问题描述
我最近一直在认真研究C ++分类。左值和右值之间的区别似乎很明显,但是当涉及到prvalue和xvalue时,我感到困惑。
给出以下示例:
Child
运行示例,控制台将放置:
123
123
123
-858993460
谁能解释为什么它在最后的输出中给出了意外的值?
此示例显示关于xvalue的什么功能?
解决方法
foo2
返回绑定到临时的引用,该引用立即被销毁;它总是返回悬挂的reference。
与return语句中的函数的返回值绑定的临时绑定不会扩展:它会在return表达式的末尾立即销毁。这样的函数总是返回一个悬空的引用。
对返回的引用(如foo2(bar1).value
和bar2 = foo2(bar1);
的取消引用导致UB;一切皆有可能。
另一方面,foo1
没有这样的问题。返回值已从临时对象移出。