为什么使用 std::swap 而不是 std::move 作为(可选)输出值?

问题描述 投票:0回答:1

我正在查看 Microsoft 的代码,我注意到以下内容:

可选参数

std::vector<T>* vOut
被传递到函数中。 该函数本身使用单独的本地
std::vector<T> result
作为可选结果。

在函数结束时,他们执行以下操作将结果传递给调用者:

if(vOut) {
    std::swap(*vOut,result);
}

为什么有人会在这里使用

std::swap
而不是像这样的移动分配
*vOut = std::move(result)

这是一个例子

c++ move-semantics
1个回答
0
投票

嗯,总是有可能某些东西是在 C++11 之前制作的,因此移动可能不可用。

但是,当我希望另一个对象处于“更好定义”状态时,我可能偶尔会使用

swap
——也就是说,移动数据但也有一个清晰的对象,而不仅仅是一个可以安全使用的对象。

最后但并非最不重要的一点是,有人可能不会考虑每一个微小的细节 - 并非每一段生产代码都可以作为教科书示例,并且

std::move
std::swap
在许多情况下是微观优化最好(这一举措甚至可能在
swap
成员之上实施),所以这不是需要特别担心的事情。

© www.soinside.com 2019 - 2024. All rights reserved.