我注意到许多人分别在C++程序中包含iostream和ostream,如下所示:
#include <iostream>
#include <ostream>
int main()
{
}
Run Code Online (Sandbox Code Playgroud)
为什么有人这样做?由于iostream继承自ostream,它应该包含其中的所有内容,对吧?有一些不明原因吗?简单(std :: cout)代码怎么样?
虽然stringstream继承自iostream,但它未在<iostream>标头中声明.该<iostream>标头包含的定义iostream类型与著名沿cout,cerr,cin,和clog类型,但不能的其它类型的iostreams(例如,文件流).对于这些,您需要显式#include必需的头文件.
编辑:为了回应你修改过的问题,我提出了C++规范,有趣的是它并没有说<iostream>必须包括<ostream>或者<istream>.事实上,它只能包括在内<iosfwd>.因此,有可能#include <iostream>没有实际获得任何一个istream或完整的类定义ostream.只有明确包含这些头文件才能保证这些类的定义,而不仅仅是前向声明,是可见的.
iostream显式包含istream和ostream(C++0x 需要这样做,而 gnu libstdc++ 版本会这样做),所以 ostream 在技术上是不必要的
备查:
fstream 包含 fstream(文件流)的声明,
sstream 包含 stringstream(字符串流)的声明
iostream 声明标准的 I/O 设施(例如 cin、cout、...)
iosfwd 是向前声明主要类型的标准头文件。