显然,流无法复制。应该可以移动流。根据 27.9.1.11 [ofstream.cons] 第 4 段,可以移动构造一个 std::ofstream
(对于 std::ifstream
也是如此,std::fstream
和 std::*stringstream
变体)。例如:
#include <iostream>
#include <fstream>
#include <string>
std::ofstream makeStream(std::string const& name) {
return std::ofstream(name);
}
int main()
{
std::ofstream out{ makeStream("example.log") };
}
尝试移动 std::ostream
,例如,让工厂函数创建 std::ofstream
、std::ostringstream
,或根据作为参数传递的 URN 的其他流不起作用。 std::ostream
(嗯,类模板 std::basic_ostream
真的)根据 27.7.3.1 [ostream] 有一个 protected
移动构造函数.
为什么std::ostream
不能自己移动?
最佳答案
最初它们是可移动的。结果证明这是我的设计缺陷,由 Alberto Ganesh Barbati 发现:
http://cplusplus.github.io/LWG/lwg-defects.html#911
该问题显示了一些 ostream
被移动和/或交换的示例,结果令人惊讶,而不是预期。我确信这些类型不应该是公开移动的,也不能通过这个问题交换。
关于c++ - 为什么 std::ostream 不能移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20774587/