Namespaces
Variants

std::ios_base:: Init

From cppreference.net
class Init ;

此类用于确保默认的 C++ 流( std::cin std::cout 等)得到正确的初始化和析构。该类会跟踪其实例的创建数量,在构造第一个实例时初始化 C++ 流,并在最后一个实例析构时刷新输出流。

头文件 <iostream> 的行为如同它直接或间接定义了一个具有静态存储期的 std::ios_base::Init 实例:这使得在具有 有序初始化 的静态对象的构造函数和析构函数中访问标准 I/O 流是安全的(只要在定义这些对象之前,翻译单元中已包含 <iostream> )。

托管实现 中,每个 C++ 库模块 的行为如同包含一个 接口单元 ,该单元定义了具有 有序初始化 特性的未导出 std::ios_base::Init 变量。

因此,该变量的定义在导入 C++ 库模块后的任何声明之前按出现顺序排序。对于未引用任何标准 iostream 对象的程序而言,此类定义是否存在是不可观测的。

(since C++23)

成员函数

(constructor)
若默认C++流尚未创建则进行初始化
(公开成员函数)
(destructor)
* this 是最后一个被销毁的实例,则刷新默认C++流
(公开成员函数)

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

DR 适用范围 发布时的行为 正确行为
LWG 1123 C++98 构造函数和析构函数的行为
依赖于仅用于说明的静态数据成员 init_cnt
移除了该依赖关系

另请参阅

从标准C输入流 stdin 读取数据
(全局对象)
写入到标准C输出流 stdout
(全局对象)
写入到标准C错误流 stderr ,无缓冲
(全局对象)
写入到标准C错误流 stderr
(全局对象)