显然,流不能被复制。应该可以移动流。根据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
,例如,让工厂函数根据作为参数传递的URN创建std::ofstream
、std::ostringstream
或其他流是不起作用的。根据27.7.3.1oStream,std::ostream
(实际上是类模板std::basic_ostream
)有一个protected
move构造函数。
为什么std::ostream
不能自己移动?
发布于 2013-12-26 00:16:13
最初它们是可移动的。这被证明是我的一个设计缺陷,并由Alberto Ganesh Barbati发现:
http://cplusplus.github.io/LWG/lwg-defects.html#911
这个问题显示了一些ostream
被移动和/或交换的例子,结果令人惊讶,而不是预期的。我确信,这些类型不应该公开移动,也不应该因为这个问题而改变。
https://stackoverflow.com/questions/20774587
复制相似问题