std::move(x) 函数实际上并没有移动任何物理数据。它本质上是转换为右值,特别是 x 值。这种转换可能会导致混乱,因此了解命名约定背后的预期目的非常重要。
移动的原始概念可以追溯到 2002 年的最初移动提案。该提案引入了右值引用并展示了如何编写一个更高效的 std::swap。当时,与“&&”相关的唯一含义是逻辑性的,因此需要一种更具可读性的方法来传达函数的意图。
开发人员没有使用“cast_to_rvalue”或类似的名称,而是使用选择“移动”来突出显示转换的目的:启用移动语义。这种命名约定有助于阐明代码的意图,而无需深入了解值类别的技术细节。
今天,熟练的 C 程序员应该意识到 std::move 本质上是一个强制转换,而初学者程序员可以理解它目的是从源中移动而不是从源中复制。如果需要,其他开发人员可以使用不同的名称实现类似的功能,这表明 std::move 并不垄断该功能。
就生成的目标代码而言,std::move 对平凡没有影响可移动的物体。但是,对于具有自定义移动赋值运算符的对象,std::move 可以影响调用哪个重载,从而可能提高性能。
总体而言,将 std::move 命名为“move”具有教学意义目的,强调功能的意图而不是其技术实现。
以上是尽管实际上没有移动数据,为什么 std::move 被命名为 std::move ?的详细内容。更多信息请关注PHP中文网其他相关文章!