- 它是什么?
- 它有什么作用?
- 什么时候应该使用它?
好的链接表示赞赏。
原文由 Basilevs 发布,翻译遵循 CC BY-SA 4.0 许可协议
好的链接表示赞赏。
原文由 Basilevs 发布,翻译遵循 CC BY-SA 4.0 许可协议
std::move
本身除了 static_cast
什么都不做。根据 cppreference.com
它完全等同于将 static_cast 转换为右值引用类型。
因此,它取决于您在 move
之后分配给的变量的类型,如果该类型具有 constructors
或 assign operators
参数,则可能取值或者可能不会 窃取 原始变量的内容,因此,它可能会将原始变量留在 unspecified state
中:
除非另有说明,否则所有已被移动的标准库对象都处于有效但未指定的状态。
因为对于整数和原始指针等内置文字类型没有特殊的 move constructor
或 move assign operator
,所以它只是这些类型的简单副本。
原文由 Tiger Yu 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
关于 C++11 R 值引用和移动构造函数的维基百科页面
在 C++11 中,除了复制构造函数之外,对象还可以具有移动构造函数。
(除了复制赋值运算符之外,它们还有移动赋值运算符。)
如果对象具有“右值引用”类型(
Type &&
),则使用移动构造函数而不是复制构造函数。std::move()
是一种产生对对象的右值引用的强制转换,以便能够从它移动。这是一种避免复制的新 C++ 方法。例如,使用移动构造函数,
std::vector
可以将其指向数据的内部指针复制到新对象,使移动的对象处于已移动状态,因此不会复制所有数据。这将是 C++ 有效的。尝试在谷歌上搜索移动语义、右值、完美转发。