知识卡片

move只是转换

普通读书笔记卡 · 1394

内容

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 在运行期什么也不做。