gpt4 book ai didi

c++ - 临时对象有身份吗?

转载 作者:太空宇宙 更新时间:2023-11-04 15:31:05 24 4
gpt4 key购买 nike

我一直在质疑自己Temporary Objects是否有身份。我知道以下内容是有效的:

object.temporary_object().modify()

只要返回的对象是非常量的或者在对象上调用的函数就不会修改不可变成员。

根据 the value categories definition , prvalue 的结果可以移动 但没有标识,并且临时对象是 prvalue 表达式的结果,如何修改它们?

最佳答案

链接文档不规范。在某种意义上,它似乎描述了纯右值应该是什么,而不是它们当时是什么。在 C++17 中,纯右值没有恒等式成为事实——但在 C++11 和 C++14 中,情况并非如此。

在 C++11 和 C++14 中,类类型的纯右值确实有一个恒等式,因为正如您所观察到的,可以在其上调用一个方法,并且有也是观察其地址的方法。类似地,数组类型的纯右值具有恒等式。标量类型的纯右值(例如, 整数文字)没有身份。将它们绑定(bind)到引用将导致临时对象的具体化,该对象现在有一个地址但不再作为纯右值可观察。

在 C++17 中,纯右值没有标识,也不是临时对象,而是可用于创建临时(或非临时)对象的表达式。从纯右值移动到对象有效地“调用”了纯右值。临时对象只能作为 xvalue 进行观察。

关于c++ - 临时对象有身份吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52318426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com