如何解决xvalue和prvalue之间的一些区别
我最近一直在认真研究C ++分类。左值和右值之间的区别似乎很明显,但是当涉及到prvalue和xvalue时,我感到困惑。
给出以下示例:
Child
运行示例,控制台将放置:
123
123
123
-858993460
谁能解释为什么它在最后的输出中给出了意外的值?
此示例显示关于xvalue的什么功能?
解决方法
foo2
返回绑定到临时的引用,该引用立即被销毁;它总是返回悬挂的reference。
与return语句中的函数的返回值绑定的临时绑定不会扩展:它会在return表达式的末尾立即销毁。这样的函数总是返回一个悬空的引用。
对返回的引用(如foo2(bar1).value
和bar2 = foo2(bar1);
的取消引用导致UB;一切皆有可能。
另一方面,foo1
没有这样的问题。返回值已从临时对象移出。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。