【发布时间】:2020-03-18 20:05:49
【问题描述】:
大多数时候我看到std::move 发布在这里,它引用<utility> 版本。
std::move in <algorithm> 实际上就像它的名字所暗示的那样,move,而 std::move in <utility> 将其参数转换为一个 xvalue,这基本上只是最终将 xvalue 移动到一个左值的预处理步骤.那么当它们的功能不同时,将它们命名为move 是不是有点令人困惑?
【问题讨论】:
-
是的,
move应该被称为make_rvalue或类似的东西。一次又一次地解释单个参数std::move实际上并没有移动任何东西,这令人沮丧。 -
<algorithm>中的那个只是应用于整个范围的<utility>中的那个。 -
@KaenbyouRin 是的,但
<algorithm>中的那个实际上确实执行了移动(假设为我们移动的类型定义了移动赋值运算符)。 -
热门:他们应该让
std::move成为运算符而不是库函数。任何比std::move更好的名字都会更长,这很糟糕。
标签: c++ move c++-standard-library