什么时候我们应该在c ++中使用memcpy和memmove?

Tho*_*ees -1 c++ memcpy c++11

我反思memcpy.

我知道memcpy用于将变量复制到变量.

但是使用它并不是更好:( 例如)

int a = 5;
int b;

b = a;
Run Code Online (Sandbox Code Playgroud)

而不是memcpy?

或使用std::move替代memmove

  1. Memcpy并且Memmove没有过时/缓慢的功能(也许这些功能来自C)?
  2. 如果是,在C++ 11标准中替换这些函数的最佳方法是什么?

Ben*_*igt 7

为了降低重要性,优点是:

  • memcpy并且memmove是类型不可知的,因此它们可用于绕过严格的别名限制.

  • memcpy并且memmove不需要对齐,尽管它们在数据对齐时可能运行得更快.

  • memcpy可能更快,因为它可以一次复制多个元素.std::is_trivially_copyable但是,对于类型特征,也std::copy应该这样做.

当然,它们的缺点是只使用简单的可复制类型,并且只使用指针,而不是迭代器.但它们在C++代码中具有明确的用途,例如,当从网络数据包或文件块中提取未对齐数据,或使用位技巧实现浮点函数的近似时.

  • @Alf:你是对的.标准中的措辞是"如果程序试图通过以下类型之一以外的glvalue访问对象的存储值,则行为未定义**".不知怎的,这并没有给我一些比gcc关于"严格别名"的错误信息更少破碎的感觉. (2认同)