为什么我要单独包含iostream和ostream?

时间:2011-02-08 06:21:24

标签: c++ iostream

我注意到许多人分别在C ++程序中包含iostream和ostream,如下所示:

#include <iostream>
#include <ostream>
int main()
{
}

为什么有人这样做?由于iostream继承自ostream,它应该包含其中的所有内容,对吧?有一些不明原因吗?简单的(std :: cout)代码怎么样?

2 个答案:

答案 0 :(得分:7)

虽然stringstream继承自iostream,但它未在<iostream>标头中声明。 <iostream>标头包含iostream类型的定义以及着名的coutcerrcinclog类型,但不包括其他类型为iostreams(例如,文件流)。对于这些,您需要显式#include必需的头文件。

编辑:在回答您修改后的问题时,我提出了C ++规范,有趣的是表示<iostream>必须包含<ostream> 1}}或<istream>。实际上,只需要包含<iosfwd>就可以逃脱。因此,#include <iostream>可能无法实际获得istreamostream的完整类定义。只有明确包含这些标题才能保证这些类的定义,而不仅仅是前向声明。

答案 1 :(得分:4)

iostream显式包含istreamostream(C ++ 0x需要这个,gnu libstdc ++版本可以这样做),所以ostream在技术上是不必要的

供将来参考:

fstream包含fstream(文件流)的声明,

sstream包含stringstream(字符串流)

的声明

iostream声明标准的i / o设施(例如cin,cout,......)

iosfwd是前向声明主要类型的标准标题。