10

使用 std::fstreamone 可以声明类型ifstreamofstream. 唯一的区别是,fstream我们需要提供in, out,app作为其他两个可能并不总是需要的参数。

有没有什么特别的东西ifstream,ofstream不能用fstream或者只是编码方便来完成?

4

3 回答 3

16

这有点像问我们为什么想要const你无论如何都可以从变量中读取和写入。它允许编译时检查,这是减少错误的宝贵功能。它也更具自我记录性,因为在没有构造函数调用的情况下查看声明时,您可以看到它是输入、输出还是两者兼而有之:您提到的参数通常只能在可能不可用的实现文件中看到。此外,每种类型的流可能在他们需要的数据成员上存在一些差异 - 可能使用与您的实际需求相匹配的最小功能类可以节省内存、时间初始化或检查其他变量等。

于 2012-08-02T03:02:50.043 回答
4

如果有的话,fstream那只是一种方便。特别是,您所拥有的基本上是:

namespace std { 
class ifstream { /* ... */ };

class ofstream { /* ... */ };

class fstream : public ifstream, public ofstream { /* ... */ };
}

[显然跳过了很多不相关的细节]。

简而言之,fstream提供了 a 的所有输入能力和 a 的所有输出ifstream能力。没有and , an (至少在任何类似于其当前形式的情况下)根本不存在。ofstreamifstreamofstreamifstreamofstreamfstream

于 2012-08-02T03:23:25.280 回答
3

整个要点是通用的。如果你只需要读取一个文件,你可以把一个ifstream作为参数,然后任何支持读取的东西都可以传入,即使它是不可写的。反之亦然。

于 2012-08-02T03:00:28.593 回答