Where is cout declared?
Solution 1
Yes, that is indeed the declaration of std::cout
, found inside the <iostream>
header.
The relevant standard part can be found in §27.4.1 [iostream.objects.overview]
:
Header
<iostream>
synopsis
#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;
}
p1 The header
<iostream>
declares objects that associate objects with the standard C streams provided for by the functions declared in<cstdio>
(27.9.2), and includes all the headers necessary to use these objects.
Solution 2
Is that the declaration of cout, and is cout an instance of the ostream class?
Yes, that is the declaration of std::cout
and yes it's an instance of std::ostream
. It is declared extern
so that the object is only created once even if the header is included in multiple translation units.
Comments
-
Moshe over 3 years
My computer science professor wants us to find the declaration of
cout
. I've compiled a simple Hello world program using g++ and the -E parameter. Here's what my hello.cpp looks like:#include <iostream> using namespace std; int main(){ string name=""; cout << "Good morning! What's your name?"; cin >> name; cout << "Hello " << name << ".\n"; return 0; }
My compile command:
g++ -E hello.cpp > hello.p
In hello.p, I ran a search in VIM, like so:
:/cout
I see the following line:
extern ostream cout;
Is that the declaration of
cout
, and iscout
an instance of theostream
class?Edit:
What's the
wcout
declaration there for? If I recall correctly the letter "w" stands for "wide", but I don't know what implication that has. What is awcout
and awostream
? -
moshbear about 12 yearsDon't forget the
namespace std { ... }
part. It'sstd::ostream std::cout
, not::ostream ::cout
. -
Xeo about 12 years@Moshe:
wcout
is just abasic_ostream
specialized onwchar_t
, which means UTF-16 on Windows and UTF-8 on Linux IIRC.