Where is cout declared?

Moshe picture Moshe · Mar 11, 2012 · Viewed 18.9k times · Source

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 is cout an instance of the ostream 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 a wcout and a wostream?

Answer

Xeo picture Xeo · Mar 11, 2012

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.