提问人:24n8 提问时间:3/19/2020 最后编辑:24n8 更新时间:3/19/2020 访问量:1006
为什么在<算法>和<utility中都有std::move>
Why is there a std::move in both <algorithm> and <utility>
问:
大多数时候我在这里看到发布,它引用的是版本。std::move
<utility>
<algorithm>
中的 std::
move 实际上就像它的名字所暗示的那样,移动,而 <utility>
中的 std::move
将其参数转换为 xvalue,这基本上只是最终将 xvalue 移动到 lvalue 的预处理步骤。那么,当两者的功能不同时,命名这两个是不是有点令人困惑?move
答:
9赞
eerorika
3/19/2020
#1
那么,将这两者都命名为 move 是不是有点令人困惑?
这可能会令人困惑,尤其是那些不习惯支持重载的语言的人。诚然,编程准则通常不鼓励具有不同含义的重载。
但是,尽管这是主观的,但要知道有两个同名的功能也不是很困难。不同的参数列表提供了足够的上下文,以便于将一个参数与另一个参数区分开来。
为什么 和 中都有一个 std::move
因为该语言的设计者选择对这两个函数使用相同的名称。
std::move
是表达这两种功能的一种非常简洁的方式。in 中的一个是来自同一标头的补充。<algorithm>
std::copy
而 std::move in 将其参数转换为 xvalue,这基本上只是最终移动的预处理步骤
描述函数的作用并不是函数名称可以表达的唯一内容。在这种情况下,该名称表达了使用该函数的程序员的意图:如果可能的话,程序员打算从参数 lvalue 中移动。
这是程序员可能需要经常编写的内容;因此,需要非常短的名称。
评论
move
make_rvalue
std::move
<algorithm>
<utility>
<algorithm>
std::move
std::move