memmove和c ++ 11 std :: move之间有什么不同?

时间:2013-10-17 06:48:24

标签: c++ c++11

memmove和c ++ 11 std::move之间有什么不同?我可以在重叠的内存位置使用std::move吗?哪种方法具有更高的速度性能?

1 个答案:

答案 0 :(得分:5)

有几种方法:

  1. std :: move调用赋值运算符,而memmove则不调用赋值运算符。因此,memmove不适用于非POD类型。
  2. std :: move将适用于任何C ++容器类型,而memmove仅适用于在连续内存位置线性存储元素的那些(例如使用数组和std :: vector)。
  3. std :: move不适合与左侧源范围重叠的目标范围(使用move_backwards),而memmove适用于所有重叠范围。
  4. 在将POD类型复制到右重叠范围的情况下,memmove和std :: move可能具有相似的性能。在所有其他情况下,两者中只有一个是合适的,因此您无法真正比​​较性能。