首页 > 后端开发 > C++ > 正文

如果 `std::move` 不移动任何东西,为什么它被称为 `std::move`?

Mary-Kate Olsen
发布: 2024-11-20 04:40:02
原创
884 人浏览过

Why is `std::move` Called `std::move` if it Doesn't Move Anything?

为什么 std::move 命名为 std::move?

与它的名字相反,std::move 并没有物理上移动任何东西;它只是移动任何东西。相反,它将对象转换为右值引用,或更具体地说,转换为 xvalue。将函数命名为 move 的决定并不是为了欺骗或混淆,而是为了使代码更具可读性。

在右值引用的早期阶段,std::swap 函数需要针对性能进行优化。原始方法使用显式 static_cast表达式,这掩盖了代码的根本目的。

通过引入 std::move,显式强制转换被替换为强调代码意图的语法糖:启用移动语义。解释精确的技术细节,例如“强制转换为右值”,会引发额外的问题,从而模糊要点。

std::move 的历史

std:: 的历史move 可以追溯到 2002 年关于右值引用的提案。 move 函数最初是作为 static_cast

随着 C 语言的发展,右值的概念被细化为我们今天所知的值类别。使用不同的名称(例如cast_to_xvalue)来更准确地描述操作可能会妨碍可读性。

std::move 的作用

从本质上讲,std::move 只是简单地转换一个对象到 x 值。这种转换对普通可移动对象没有影响,并且对于具有移动赋值运算符的对象,它确保调用移动赋值运算符而不是复制赋值运算符。

就生成的对象代码而言,std:: move 对于一般可移动的物体没有影响。对于具有移动赋值运算符的对象,它可能会改变重载决策。然而,在运行时,std::move 实际上消失了,它唯一的影响是在编译时。

以上是如果 `std::move` 不移动任何东西,为什么它被称为 `std::move`?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板