有很多文章讨论价值语义和引用语义,也许更多地试图解释移动语义。然而,从来没有人谈论过值语义和移动语义之间的连接。它们是正交的概念吗?
注意:这个问题不是关于比较值语义和移动语义,因为很明显这两个概念不是“可比较的”。这个问题是关于他们是如何联系的,特别是(就像@StoryTeller说的),关于讨论(如何):
移动语义有助于更多地使用值类型。
发布于 2018-05-06 13:27:19
来自原搬迁方案
复制与移动 C和C++是建立在复制语义之上的。这是件好事。Move语义并不是试图取代复制语义,也不是以任何方式破坏它。相反,这一提议旨在增强复制语义。一般用户定义的类可能是可复制的和可移动的,其中一个或另一个,或者两者都不是。 复制和移动之间的区别是,副本使源保持不变。另一方面,移动会使源处于为每种类型定义不同的状态。源的状态可能不变,也可能完全不同。唯一的要求是对象保持自洽状态(所有内部不变量仍然完好无损)。从客户端代码的角度来看,选择move而不是copy意味着您不关心源的状态发生了什么。 对于豆荚,移动和复制是相同的操作(直到机器指令级别)。
我想还可以加上这样的话:
Move语义允许我们保持值语义,但同时在原始(复制)对象的值对程序逻辑不重要的情况下获得引用语义的性能。
https://stackoverflow.com/questions/50198991
复制相似问题