xvalue和prvalue之间的一些区别

问题描述

我最近一直在认真研究C ++分类。左值和右值之间的区别似乎很明显,但是当涉及到prvalue和xvalue时,我感到困惑。
给出以下示例:

Child

运行示例,控制台将放置:
123
123
123
-858993460
谁能解释为什么它在最后的输出中给出了意外的值?
此示例显示关于xvalue的什么功能

解决方法

foo2返回绑定到临时的引用,该引用立即被销毁;它总是返回悬挂的reference

与return语句中的函数的返回值绑定的临时绑定不会扩展:它会在return表达式的末尾立即销毁。这样的函数总是返回一个悬空的引用。

对返回的引用(如foo2(bar1).valuebar2 = foo2(bar1);的取消引用导致UB;一切皆有可能。

另一方面,foo1没有这样的问题。返回值已从临时对象移出。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...