什么是 std::move(),什么时候应该使用它?

新手上路,请多包涵
  1. 它是什么?
  2. 它有什么作用?
  3. 什么时候应该使用它?

好的链接表示赞赏。

原文由 Basilevs 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 772
2 个回答

关于 C++11 R 值引用和移动构造函数的维基百科页面

  1. 在 C++11 中,除了复制构造函数之外,对象还可以具有移动构造函数。

    (除了复制赋值运算符之外,它们还有移动赋值运算符。)

  2. 如果对象具有“右值引用”类型( Type && ),则使用移动构造函数而不是复制构造函数。

  3. std::move() 是一种产生对对象的右值引用的强制转换,以便能够从它移动。

这是一种避免复制的新 C++ 方法。例如,使用移动构造函数, std::vector 可以将其指向数据的内部指针复制到新对象,使移动的对象处于已移动状态,因此不会复制所有数据。这将是 C++ 有效的。

尝试在谷歌上搜索移动语义、右值、完美转发。

原文由 Scharron 发布,翻译遵循 CC BY-SA 4.0 许可协议

std::move 本身除了 static_cast 什么都不做。根据 cppreference.com

它完全等同于将 static_cast 转换为右值引用类型。

因此,它取决于您在 move 之后分配给的变量的类型,如果该类型具有 constructorsassign operators 参数,则可能取值或者可能不会 窃取 原始变量的内容,因此,它可能会将原始变量留在 unspecified state 中:

除非另有说明,否则所有已被移动的标准库对象都处于有效但未指定的状态。

因为对于整数和原始指针等内置文字类型没有特殊的 move constructormove assign operator ,所以它只是这些类型的简单副本。

原文由 Tiger Yu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题