Где объявлен cout? - PullRequest
       33

Где объявлен cout?

9 голосов
/ 11 марта 2012

Мой профессор информатики хочет, чтобы мы нашли объявление cout.Я скомпилировал простую программу Hello world, используя g ++ и параметр -E.Вот как выглядит мой hello.cpp:

#include <iostream>

using namespace std;

int main(){

  string name="";

  cout << "Good morning! What's your name?";

  cin >> name;

  cout << "Hello " << name << ".\n";

  return 0; 

}

Моя команда компиляции:

g++ -E hello.cpp > hello.p

В hello.p я запустил поиск в VIM, например:

:/cout

Я вижу следующую строку:

extern ostream cout;

Является ли это объявлением cout, и является ли cout экземпляром класса ostream?

Редактировать:

Для чего существует объявление wcout?Если я правильно помню, буква «w» означает «широкий», но я не знаю, какое это имеет значение.Что такое wcout и wostream?

Ответы [ 2 ]

8 голосов
/ 11 марта 2012

Да, это действительно объявление std::cout, которое находится внутри заголовка <iostream>.

Соответствующую стандартную часть можно найти в §27.4.1 [iostream.objects.overview]:

Заголовок <iostream> синопсис

#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 Заголовок <iostream> объявляет объекты, которые связывают объекты со стандартными потоками C, предусмотренными функциями, объявленными в <cstdio> (27.9.2), и включает все заголовки, необходимые для использования этих объектов.

2 голосов
/ 11 марта 2012

Это объявление cout и является ли он экземпляром класса ostream?

Да, это объявление std::cout и да, это экземпляр std::ostream.Он объявляется extern, так что объект создается только один раз, даже если заголовок включен в несколько единиц перевода.

...