lai*_*e9m 1 c++ move-semantics c++11
有很多文章讨论价值语义与参考语义,也许更多的文章试图解释移动语义.但是,没有人谈论过值语义和移动语义之间的联系.它们是正交概念吗?
注意:这个问题不是关于比较值语义和移动语义,因为很明显这两个概念不是"可比的".这个问题是关于他们是如何联系的,特别是(如@StoryTeller所说),讨论(如何):
移动语义有助于更多地使用值类型.
从最初的移动提案:
复制与移动
C和C++建立在复制语义上.这是一件好事.移动语义不是试图取代复制语义,也不是以任何方式破坏复制语义.相反,该提议旨在增强复制语义.一般用户定义的类可以是可复制的和可移动的,一个或另一个,或两者都不是.
副本和移动之间的区别在于副本保持源不变.另一方面,移动使源处于针对每种类型定义不同的状态.源的状态可以不变,或者可以完全不同.唯一的要求是对象保持自我一致状态(所有内部不变量仍然完好无损).从客户端代码的角度来看,选择move而不是copy意味着您不关心源的状态会发生什么.
对于POD,移动和复制是相同的操作(直到机器指令级别).
我想有人可以加上这个并说:
移动语义允许我们保持值语义,但同时在原始(复制自)对象的值对程序逻辑不重要的情况下获得引用语义的性能.
归档时间: |
|
查看次数: |
391 次 |
最近记录: |