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;
};
Include the iostreams standard header <iostream>
to declare objects that control reading from and writing to the
standard streams. This is often the only header you need include to perform input and output from a C++ program.
The objects fall into two groups:
cin
, cout
, cerr
, and clog
are byte oriented, performing conventional byte-at-a-time transfers.wcin
, wcout
, wcerr
, and wclog
are wide oriented, translating to and from the wide characters that the
program manipulates internally.Once you perform certain operations on a stream, such as the standard input, you cannot perform operations of a
different orientation on the same stream. A program cannot operate interchangeably on both cin
and wcin
, for
example.
All the objects declared in this header share a peculiar property: You can assume they are constructed before any
static objects you define, in a translation unit that includes <iostreams>
. Equally, you can assume that these objects
are not destroyed before the destructors for any such static objects you define. (The output streams are, however,
flushed during program termination.) You can safely read from or write to the standard streams prior to program
startup and after program termination.
This guarantee is not universal, however. A static constructor may call a function in another translation unit. The called
function cannot assume that the objects declared in this header have been constructed, given the uncertain order in
which translation units participate in static construction. To use these objects in such a context, you must first construct
an object of class ios_base::Init
, as in:
#include <iostream>
using namespace std;
void marker()
{ // called by some constructor
ios_base::Init unused_name;
cout << "called fun" << endl;
}