显然,流无法复制。应该可以移动流。根据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
实际上是类模板)具有protected
根据27.7.3.1 [ostream]的move构造函数。
为什么std::ostream
本身不能移动?
最初它们是可移动的。事实证明,这是我的设计缺陷,并由Alberto Ganesh Barbati发现:
http://cplusplus.github.io/LWG/lwg-defects.html#911
问题显示了一些ostream
移动和/或交换位置的示例,结果令人惊讶,而不是预期的。我坚信这些类型不应被此问题公开公开或互换。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句