为什么'ifstream'和'ofstream'被添加到“std”,而'fstream'可以用于这两个目的?

时间:2012-08-02 02:57:08

标签: c++ fstream ifstream ofstream

使用std::fstream可以声明ifstreamofstream类型的对象。唯一的区别是,对于fstream,我们需要提供inoutapp作为参数,而其他两个参数可能并不总是需要。

ifstream,ofstream是否有任何特殊内容,fstream无法完成或只是编码方便?

3 个答案:

答案 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的所有输出功能}}。如果没有ofstreamifstream,则ofstream(至少在任何类似于其当前形式的内容)中根本不存在。