使用std::fstream
可以声明ifstream
和ofstream
类型的对象。唯一的区别是,对于fstream
,我们需要提供in
,out
,app
作为参数,而其他两个参数可能并不总是需要。
ifstream,ofstream
是否有任何特殊内容,fstream
无法完成或只是编码方便?
答案 0 :(得分:16)
这有点像问我们为什么在你可以从变量读取和写入时想要const
。它允许编译时检查,这是减少错误的宝贵功能。它也更加自我记录,因为在没有构造函数调用的情况下查看声明时,您可以看到它是输入,输出还是两者:您提到的参数通常只能在实现文件中看到,而这可能并不适用。此外,每种类型的流可能在他们需要的数据成员中有一些差异 - 可能使用符合您实际需要的最小功能类可以节省内存,初始化时间或检查其他变量等。
答案 1 :(得分:3)
重点是通用性。如果您只需要读取文件,则可以将ifstream作为参数,然后可以传入任何支持读取的内容,即使它不可写。反之亦然。
答案 2 :(得分:3)
如果有的话,fstream
就是一个方便的。特别是,你所拥有的基本上是:
namespace std {
class ifstream { /* ... */ };
class ofstream { /* ... */ };
class fstream : public ifstream, public ofstream { /* ... */ };
}
[明显地跳过很多不相关的细节]。
简而言之,fstream
通过ifstream
和{{1}提供ofstream
的所有输入功能和ifstream
的所有输出功能}}。如果没有ofstream
和ifstream
,则ofstream
(至少在任何类似于其当前形式的内容)中根本不存在。