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

Bry*_*Fok 3 c++ c++11

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

Sne*_*tel 6

几种方式:

  1. std :: move调用赋值运算符,而memmove则不调用赋值运算符.因此,memmove不适用于非POD类型.
  2. std :: move将适用于任何C++容器类型,而memmove仅适用于在连续内存位置(例如使用数组和std :: vector)线性存储元素的那些.
  3. std :: move不适合与左侧源范围重叠的目标范围(使用move_backwards),而memmove适用于所有重叠范围.

在将POD类型复制到右重叠范围的情况下,memmove和std :: move可能具有相似的性能.在所有其他情况下,两者中只有一个是合适的,因此您无法真正比​​较性能.