开发者

Why would I include iostream and ostream separately? [duplicate]

This question already has answers here: iostream vs ostream what is different? (5 answers) Closed 6 years ago.

I've noticed that many people include iostream and ostr开发者_JAVA技巧eam in C++ programs separately, like so:

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

Why would anyone do that? Since iostream inherits from ostream, it should include everything in it, right? Is there some obscure reason? What about simple (std::cout) code?


Although stringstream inherits from iostream, it is not declared in the <iostream> header. The <iostream> header contains the definition of the iostream type along with the famous cout, cerr, cin, and clog types, but not other types that are iostreams (for example, file streams). For these, you do need to explicitly #include the requisite header files.

EDIT: In response to your revised question, I pulled up the C++ spec and interestingly it does not say that <iostream> has to include either <ostream> or <istream>. In fact, it could get away with just including <iosfwd>. Consequently, it's possible to #include <iostream> without actually getting a full class definition for either istream or ostream. Only explicitly including those headers can guarantee that the definitions of those classes, not just the forward-declarations, are visible.


iostream explicitly includes istream and ostream (C++0x requires this, and the gnu libstdc++ version does this), so ostream is technically unnecessary

for future reference:

fstream contains the declaration for fstream (file streams),

sstream contains the declaration for stringstream (string streams)

iostream declares the standard i/o facilities (e.g. cin, cout, ...)

iosfwd is the standard header that forward-declares the major types.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜