30 Input/output library [input.output]

30.4 Standard iostream objects [iostream.objects]

30.4.1 Header <iostream> synopsis [iostream.syn]

#include <ios>          // see [ios.syn]
#include <streambuf>    // see [streambuf.syn]
#include <istream>      // see [istream.syn]
#include <ostream>      // see [ostream.syn]

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;
}

30.4.2 Overview [iostream.objects.overview]

В этом разделе имя типа FILE относится к типу, FILE объявленному в .<cstdio>

Заголовок <iostream> объявляет объекты, которые связывают объекты со стандартными потоками C, предусмотренными функциями, объявленными в <cstdio> ([c.files]), и включает все заголовки, необходимые для использования этих объектов.

Объекты конструируются, и ассоциации устанавливаются в некоторый момент до или во время первогоios_­base​::​Init конструирования объекта класса , и в любом случае до начала выполнения тела main .288 Объекты не уничтожаются во время выполнения программы.289 Результаты включения <iostream> в блок трансляции должны быть такими, как если бы он был <iostream> определен как экземпляр ios_­base​::​Init со статической продолжительностью хранения.

Операции смешивания для соответствующих потоков с широкими и узкими символами следует той же семантике, что и смешивание таких операций с FILEs, как указано в стандартной библиотеке C.

Одновременный доступ к синхронизированным ([ios.members.static]) стандартного объекта iostream отформатирован и неотформатированная input и output функции или стандартный поток С несколькими потоками , не должно приводить к data race. [ Note: Пользователи должны по-прежнему синхронизировать одновременное использование этих объектов и потоков несколькими потоками, если они хотят избежать чередования символов. ] end note

См. Также: ISO C 7.21.2.

Если это возможно, реализациям рекомендуется инициализировать объекты раньше, чем требуется.

Конструкторы и деструкторы для статических объектов могут обращаться к этим объектам для чтения ввода stdin или записи вывода в stdout или stderr.

30.4.3 Narrow stream objects [narrow.stream.objects]

istream cin;

Объект cin управляет вводом из буфера потока, связанного с объектом stdin, объявленным в .<cstdio>

Послеcin инициализации объекта cin.tie() возвращается &cout. В остальном его состояние такое же, как требуется для basic_­ios<char>​::​init.

ostream cout;

Объект cout управляет выводом в буфер потока, связанный с объектом stdout, объявленным в . <cstdio>

ostream cerr;

Объект cerr управляет выводом в буфер потока, связанный с объектом stderr, объявленным в .<cstdio>

Послеcerr инициализации объекта cerr.flags() & unitbuf ненулевое значение и cerr.tie() возвращается &cout. В остальном его состояние такое же, как требуется для basic_­ios<char>​::​init.

ostream clog;

Объект clog управляет выводом в буфер потока, связанный с объектом stderr, объявленным в . <cstdio>

30.4.4 Wide stream objects [wide.stream.objects]

wistream wcin;

Объект wcin управляет вводом из буфера потока, связанного с объектом stdin, объявленным в .<cstdio>

Послеwcin инициализации объекта wcin.tie() возвращается &wcout. В остальном его состояние такое же, как требуется для basic_­ios<wchar_­t>​::​init.

wostream wcout;

Объект wcout управляет выводом в буфер потока, связанный с объектом stdout, объявленным в . <cstdio>

wostream wcerr;

Объект wcerr управляет выводом в буфер потока, связанный с объектом stderr, объявленным в .<cstdio>

Послеwcerr инициализации объекта wcerr.flags() & unitbuf ненулевое значение и wcerr.tie() возвращается &wcout. В остальном его состояние такое же, как требуется для basic_­ios<wchar_­t>​::​init.

wostream wclog;

Объект wclog управляет выводом в буфер потока, связанный с объектом stderr, объявленным в . <cstdio>