我见过这样编写的代码:
ifstream fin;
fin.open("largefile.dat", ifstream::binary | ifstream::in);
现在这让我感到困惑,上面的代码和下面这段代码使用ios::binary
和ios::in
作为替代品有什么不同吗?
ifstream fin;
fin.open("largefile.dat", ios::binary | ios::in);
答案 0 :(得分:7)
没有区别。这些名称继承自具体流类派生的虚拟基础std::ios_base
。
答案 1 :(得分:2)
来自 Josuttis N.M. - 标准库教程和参考。
第15.2章基本流类和流对象
IOStream库的流类形成层次结构:
此类层次结构中的类扮演以下角色:
1。基类ios_base
定义所有流类的属性,与字符类型和相应的字符特征无关。该类的大部分由状态和格式标志的组件和函数组成。类模板basic_ios<>
派生自ios_base
并定义公共属性 所有依赖于字符类型和相应字符的流类 特征。这些属性包括流使用的缓冲区的定义。缓冲区是一个 从模板类basic_streambuf<>
派生的类的对象与对应的 模板实例化。它执行实际的阅读和/或写作。类模板basic_istream<>
和basic_ostream<>
实际上来自basic_ios<>
并分别定义可用于读取或写入的对象。喜欢basic_ios<>
,这些类是使用字符类型及其参数化的模板 特征。当国际化无关紧要时,角色的相应实例化 键入char -istream
和ostream
- 使用。
4。类模板basic_iostream<>
派生自basic_istream<>
和。{1}}basic_ostream<>
。此类模板定义可用于读取和读取的对象 写作。
5.类模板basic_streambuf<>
是IOStream库的核心。这个班 定义所有可以由流写入或读取的表示的接口 其他流类用于执行字符的读写。访问 一些外部表示,类派生自basic_streambuf<>
。