与它的名字相反,std::move 并没有物理上移动任何东西;它只是移动任何东西。相反,它将对象转换为右值引用,或更具体地说,转换为 xvalue。将函数命名为 move 的决定并不是为了欺骗或混淆,而是为了使代码更具可读性。
在右值引用的早期阶段,std::swap 函数需要针对性能进行优化。原始方法使用显式 static_cast
通过引入 std::move,显式强制转换被替换为强调代码意图的语法糖:启用移动语义。解释精确的技术细节,例如“强制转换为右值”,会引发额外的问题,从而模糊要点。
std:: 的历史move 可以追溯到 2002 年关于右值引用的提案。 move 函数最初是作为 static_cast 随着 C 语言的发展,右值的概念被细化为我们今天所知的值类别。使用不同的名称(例如cast_to_xvalue)来更准确地描述操作可能会妨碍可读性。 从本质上讲,std::move 只是简单地转换一个对象到 x 值。这种转换对普通可移动对象没有影响,并且对于具有移动赋值运算符的对象,它确保调用移动赋值运算符而不是复制赋值运算符。 就生成的对象代码而言,std:: move 对于一般可移动的物体没有影响。对于具有移动赋值运算符的对象,它可能会改变重载决策。然而,在运行时,std::move 实际上消失了,它唯一的影响是在编译时。std::move 的作用
以上是如果 `std::move` 不移动任何东西,为什么它被称为 `std::move`?的详细内容。更多信息请关注PHP中文网其他相关文章!