Namespaces
Variants

std::ios_base:: Init

From cppreference.net
class Init ;

Этот класс используется для обеспечения корректной инициализации и уничтожения стандартных потоков C++ ( std::cin , std::cout и т.д.). Класс отслеживает количество созданных экземпляров и инициализирует потоки C++ при создании первого экземпляра, а также сбрасывает выходные потоки при уничтожении последнего экземпляра.

Заголовок <iostream> ведёт себя так, как если бы он определял (напрямую или косвенно) экземпляр std::ios_base::Init со статической продолжительностью хранения: это делает безопасным доступ к стандартным потокам ввода-вывода в конструкторах и деструкторах статических объектов с упорядоченной инициализацией (при условии, что <iostream> включён в единицу трансляции до определения этих объектов).

Каждый модуль стандартной библиотеки C++ в хостированной реализации ведёт себя так, как если бы он содержал интерфейсный модуль , который определяет неэкспортируемую std::ios_base::Init переменную с упорядоченной инициализацией .

В результате определение этой переменной упорядочено появлением перед любым объявлением, следующим за точкой импорта модуля стандартной библиотеки C++. Существование такого определения ненаблюдаемо для программы, которая не ссылается ни на один из стандартных объектов iostream.

(since C++23)

Функции-члены

(constructor)
инициализирует стандартные потоки C++, если они еще не были созданы
(public member function)
(destructor)
сбрасывает буферы стандартных потоков C++, если * this является последним уничтожаемым экземпляром
(public member function)

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 1123 C++98 поведение конструктора и деструктора
зависит от статического члена данных только для экспозиции init_cnt
удалена зависимость

Смотрите также

читает из стандартного потока ввода C stdin
(глобальный объект)
записывает в стандартный поток вывода C stdout
(глобальный объект)
записывает в стандартный поток ошибок C stderr , небуферизованный
(глобальный объект)
записывает в стандартный поток ошибок C stderr
(глобальный объект)