为什么 std::move 命名为 std::move?
std::move 函数尽管有它的名字,但它并不实际上移动任何东西。它只是将左值(引用对象的表达式)转换为右值(表示临时对象的表达式)。此转换是通过转换为 xvalue 类别来执行的,这与左值和纯右值不同。
这种命名选择的原因可以追溯到该概念的历史。最初,移动操作是作为一种高效交换值而不复制值的方法而引入的。早期的语法涉及使用 static_cast 将左值转换为右值。为了提高可读性并传达这些强制转换的意图,引入了 move 关键字作为 static_cast 的语法糖。
在当时的上下文中,使用术语“move”旨在表明这些强制转换的目的:启用移动语义。结果是代码传达的不是精确的技术操作(转换为右值),而是期望的结果(移动对象)。
多年来,左值和右值的概念已经演变为我们今天拥有的值类别,xvalues 表示已转换为 rvalues 的对象。因此,move 关键字可能会被视为具有误导性,因为它仅意味着可能会或可能不会发生的操作。
但是,保留了使用 move 关键字的选择以保持可读性并避免由于不熟悉的语法(如cast_to_xvalue)可能引起的混乱。 std::move 函数仍然是一个有价值的实用程序,它允许程序员简洁地表达移动语义,即使它的名称可能无法完美地捕捉其操作的技术细节。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3