正如书中所述(探索C++:程序员对C++的介绍):
istream报头声明输入运算符(>>),ostream声明输出运算符(<<)。
我可以在不添加#include <ostream>的情况下完美地运行代码
#include <iostream>
using namespace std;
int main()
{
cout << "hello world"<< endl;
return 0;
}但是,在书中的例子是:
#include <iostream>
#include <ostream> //why?
using namespace std;
int main()
{
cout << "hello world"<< endl;
return 0;
}所以,iostream、ostream和istream都是头文件,对吗?
如果没有必要使用ostream (iostream做工作),为什么作者在示例中包含?或者为什么ostream头文件仍然存在
Note:在Bruce的第一卷(2000年出版)中,没有关于ostream或istream的任何东西。只有一个头文件,即iostream。
发布于 2012-02-16 15:52:06
在那之后,我给Bjarne Stroustrup发了电子邮件,他就这样回答:
就个人而言,我总是使用 iostream ,您永远不需要两者。 ostream 存在,这样人们就可以只包括所需的最小声明。

发布于 2012-02-13 19:48:45
正如ildjarn在评论中所指出的,2003年的C++标准指出,iostream不需要包含istream和ostream。所以,从理论上讲,这本书是正确的。
但是,大多数主要的编译器供应商已经将istream和ostream添加到iostream中,因此您的代码可以在您使用的编译器上工作。在其他编译器上,您可能没有这样的运气。
如果您想要编写仅符合2003标准(或更早版本)的旧编译器上编译的可移植代码,则应同时包含两个标头。OTOH,如果您是唯一一个编译您的代码,并拥有控制哪些编译器将被使用,它是安全的只使用iostream,因为这是向前兼容的。
发布于 2012-02-13 19:51:15
在C++11中,正如第27.4.1节中的标准所指出的那样,标头iostream本身包含istream和ostream头,因此#include <ostream>是多余的。
上述部分中标准给出的iostream的“概要”是
#include <ios>
#include <streambuf>
#include <istream>
#include <ostream>
namespace std {
extern istream cin;
extern ostream cout;
extern ostream cerr;
extern ostream clog;
extern wistream wcin;
extern wostream wcout;
extern wostream wcerr;
extern wostream wclog;
}https://stackoverflow.com/questions/9266990
复制相似问题