作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经问过a similar question前段时间,但我仍然不清楚一些细节。
最佳答案
swap
有多种不同的情况。如果你想让它尽可能高效,函数就不得不担心。我建议只使用 swap function in std.algorithm .经典的交换会导致复制,因此会调用 postblit 构造函数和析构函数。 move 通常由编译器完成,而不是程序员。然而,looking at the official implementation的 swap
,看起来它玩了一些技巧来尽可能地将 move 语义排除在外。无论如何, move 通常由编译器完成。它们是一种优化,它将在它知道可以做到的地方进行(RVO 是它可以做到的经典案例)。
- All anonymous rvalues are moved, not copied. A call to
this(this
) is never inserted when the source is an anonymous rvalue (i.e., a temporary as featured in the functionhun
above).- All named temporaries that are stack-allocated inside a function and then returned elide a call to
this(this)
.- There is no guarantee that other potential elisions are observed.
关于templates - 关于 postblit 和 move 语义的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6884996/
如果我正确理解 D 中的 postblit 构造函数(总是)从按位复制开始,那么它有用户定义的主体。 但是当我查看 postblit 构造函数的主体时,它与 C++ 复制构造函数非常相似,唯一的区别是
我已经问过a similar question前段时间,但我仍然不清楚一些细节。 postblit 构造函数在什么情况下被调用? move 对象的语义是什么?它会被 postblitted 和/或破坏
我是一名优秀的程序员,十分优秀!