gpt4 book ai didi

c++ - 什么时候对流类型使用 std::swap?

转载 作者:行者123 更新时间:2023-11-28 06:10:33 24 4
gpt4 key购买 nike

试图回答这个问题text-file-handling-in-c引用 cplusplus.com .我遇到了 std::swap 函数,用于像 fstream 这样的流类型。

所以我的问题是:交换功能的确切目的是什么,例如对于“fstream”分别在什么情况下我必须使用它?

引用问答C++ std::ifstream in constructor problem我知道流类型是不可复制的。引用问答What is the copy-and-swap idiom?交换功能是例如用于实现复制构造函数,...。那么具有 swapping 功能的流类型现在是否可以使用 swap 功能进行复制 -> 如果是这样,语言开发人员是如何实现的?

最佳答案

嗯,不出所料,当您想要交换流时,您可以使用 std::swap 来处理流。例如,您可以使用它来 std::remove_if 来自流 vector 的所有“坏”流(好吧,这可能不是最好的例子。我想不出更好的一个我的头顶)。

至于这是如何工作的:从 C++11 开始,标准流是可移动构造和可移动赋值的。因此,虽然您仍然无法复制它们,但您可以使用通用交换函数交换它们,例如:

template <class T>
void swap (T &a, T &b) {
auto temp = std::move(a);
a = std::move(b);
b = std::move(temp);
}

现在我们的流无需复制就可以交换。

顺便说一句,可交换的流不会使它们可复制。当您查看示例复制赋值运算符时

MyClass& operator=(const MyClass& other)
{
MyClass tmp(other);
swap(tmp);
return *this;
}

from the question you linked ,你会注意到这一行:

MyClass tmp(other);

这需要一个复制构造函数,这是流所没有的。

关于c++ - 什么时候对流类型使用 std::swap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31360265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com