Where is cout declared?
Asked Answered
B

2

11

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?

Brunhilde answered 11/3, 2012 at 4:14 Comment(4)
I'd be willing to guess somewhere in the code that gets tacked on to your executable when you link against IOStream.Comber
@Aslai - I've pulled out a line from that code. I want to know if that's it.Brunhilde
Try this: cplusplus.com - type cout into the search box.Antiphonal
Yes, cout is an instance of ostream class.Dunker
N
9

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.

Nikos answered 11/3, 2012 at 4:24 Comment(1)
@Moshe: wcout is just a basic_ostream specialized on wchar_t, which means UTF-16 on Windows and UTF-8 on Linux IIRC.Nikos
C
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.

Champaigne answered 11/3, 2012 at 4:19 Comment(1)
Don't forget the namespace std { ... } part. It's std::ostream std::cout, not ::ostream ::cout.Blacken

© 2022 - 2024 — McMap. All rights reserved.