为什么 <algorithm> 和 <utility> 中都有 std::move

Iam*_*non 10 c++ move c++-standard-library

大多数时候我看到std::move这里发布,它引用了<utility>版本。

std::move<algorithm>实际上做什么它的名字所暗示的,移动的,而std::move<utility>投射其参数的x值,这基本上是只为最终x值移动到左值的预处理步骤。那么,move当它们的功能不同时,将它们命名为两者是不是有点令人困惑?

eer*_*ika 9

那么将这两个命名为 move 是不是有点令人困惑?

这可能会令人困惑,尤其是那些不习惯支持重载的语言的人。确实,编程指南通常不鼓励具有不同含义的重载。

但是知道有两个同名的函数也不是很难,尽管这是主观的。不同的参数列表提供了足够的上下文,可以轻松地从另一个中识别出一个。

为什么在 和 中都有 std::move

因为语言的设计者选择对两个函数使用相同的名称。

std::move是表达这两个功能的一种非常简洁的方式。一个 in<algorithm>std::copy来自同一个标题的补充。

而 std::move in 将其参数转换为 xvalue,这基本上只是最终移动的预处理步骤

描述函数的作用并不是函数名称可以表达的唯一内容。在这种情况下,名称表达了使用该函数的程序员的意图:程序员打算从参数左值移动 - 如果可能的话。

这是程序员可能需要经常编写的内容;因此需要非常短的名称。