std::ios_base::Init
来自 cppreference.com
class Init; |
||
此类用于确保默认 C++ 流 (std::cin,std::cout 等) 正确初始化和销毁。该类跟踪创建了多少个实例,并在第一个实例构造时初始化 C++ 流,并在最后一个实例销毁时刷新输出流。
头文件 <iostream> 的行为就好像它定义 (直接或间接) 了一个 std::ios_base::Init
的实例,它具有静态存储持续时间:这使得在具有 有序初始化 的静态对象的构造函数和析构函数中安全地访问标准 I/O 流 (只要 <iostream> 在定义这些对象之前包含在翻译单元中)。
在 托管实现 中,每个 C++ 库模块 的行为就好像它包含一个 接口单元,该单元定义了一个具有 有序初始化 的 未导出 的 因此,该变量的定义在任何 C++ 库模块导入点之后出现的声明之前都是外观有序的。对于没有引用任何标准 iostream 对象的程序来说,是否存在这样的定义是不可观察的。 |
(自 C++23 起) |
[编辑] 成员函数
(构造函数) |
如果默认 C++ 流尚未创建,则初始化它们 (公有成员函数) |
(析构函数) |
如果 *this 是最后一个要销毁的实例,则刷新默认 C++ 流 (公有成员函数) |
[编辑] 缺陷报告
以下行为更改缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 发布的行为 | 正确行为 |
---|---|---|---|
LWG 1123 | C++98 | 构造函数和析构函数的行为 取决于仅供解释的静态数据成员 init_cnt |
删除了依赖关系 |
[编辑] 另请参阅
从标准 C 输入流 stdin 读取 (全局对象) | |
写入标准 C 输出流 stdout (全局对象) | |
写入标准 C 错误流 stderr,未缓冲 (全局对象) | |
写入标准 C 错误流 stderr (全局对象) |