知识卡片
move只是转换
内容
std::move 只执行到右值类别的转换,不执行资源搬迁;实际移动取决于后续重载和目标类型。const 对象经 move 后仍保留常量性,可能只能复制。阅读代码时要区分“允许调用移动操作”和“确实已经发生移动”。
参考来源
- 位置:《Effective Modern C++》第5章《右值引用,移动语义,完美转发》,条款二十三:理解 std::move 和 std::forward(源文件:_epub-src/EPUB/text/ch006.xhtml)
- 结论依据:原文明确 move 是转换而非动作,并以 const 实参说明转换不保证选中移动操作。
- 原始内容:std::move 执行到右值的无条件的转换,但就自身而言,它不移动任何东西。 std::forward 只有当它的参数被绑定到一个右值时,才将参数转换为右值。 std::move 和 std::forward 在运行期什么也不做。