命名空间
变体
动作

std::ios_base::Init

来自 cppreference.com
< cpp‎ | io‎ | ios base
 
 
 
 
class Init;

此类用于确保默认 C++ 流 (std::cinstd::cout 等) 正确初始化和销毁。该类跟踪创建了多少个实例,并在第一个实例构造时初始化 C++ 流,并在最后一个实例销毁时刷新输出流。

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

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

因此,该变量的定义在任何 C++ 库模块导入点之后出现的声明之前都是外观有序的。对于没有引用任何标准 iostream 对象的程序来说,是否存在这样的定义是不可观察的。

(自 C++23 起)

[编辑] 成员函数

(构造函数)
如果默认 C++ 流尚未创建,则初始化它们
(公有成员函数)
(析构函数)
如果 *this 是最后一个要销毁的实例,则刷新默认 C++ 流
(公有成员函数)

[编辑] 缺陷报告

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

DR 应用于 发布的行为 正确行为
LWG 1123 C++98 构造函数和析构函数的行为
取决于仅供解释的静态数据成员 init_cnt
删除了依赖关系

[编辑] 另请参阅

从标准 C 输入流 stdin 读取
(全局对象)[编辑]
写入标准 C 输出流 stdout
(全局对象)[编辑]
写入标准 C 错误流 stderr,未缓冲
(全局对象)[编辑]
写入标准 C 错误流 stderr
(全局对象)[编辑]