fstream和ofstream的<<运算符有什么区别?

3
我想重载operator<<函数,将一个对象序列化到文件中 (追加)。我应该使用哪种流?是ofstream还是fstream?它们有什么区别?
std::ofstream& operator<<(std::ofstream& ofs, const MyData&);
std::fstream& operator<<(std::fstream& fs, const MyData&)

感谢您,Jack。
4个回答

15

你应该为 ostream 重载运算符,然后你可以将其自然地用于任何派生自它的类的实例——例如 ofstream、fstream(它继承自 iostream,同时也继承了 istream 和 ostream),ostringstream 和 stringstream(它们也都继承了 iostream)。

std::ostream& operator<<(std::ostream& os, const MyData&);

+1 给你。今天早上我差点发布了一个非常类似的问题。 - Brian Hooper

1

更合理的做法是为std::ostream进行重载。如果可以更通用,为什么你的实现应该限制于特定类型的输出流呢?你还可以将序列化打印到std::cout中,这简化了调试。

关于iostreams的关系和继承使用的良好概述在这里给出。此外,每个特定流的概述页面都显示了继承关系。


0
据我所知,ofstream("file.txt")fstream("file.txt", ios::out)是相同的。


0
如果您也想从同一文件中读取,请使用 fstream。如果只需追加,使用 ofstream。无论哪种情况,如果您不想覆盖现有数据,请在打开时使用 ios::app 标志。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接