std::ios_base::Init
来自cppreference.com
class Init; |
||
此类用以确保默认 C++ 流(std::cin、std::cout 等)会被正确初始化及析构。该类会跟踪它被创建的实例数量,在构造首个实例时创建并初始化 C++ 流,并且在析构最后实例时清除输出流缓冲区。
标头 <iostream> 表现如同它定义(直接或间接)一个有静态存储期的 std::ios_base::Init
实例:这使得在具有有序初始化的静态对象的构造函数及析构函数中,访问标准输入/输出流是安全的(只要在翻译单元中,定义该对象前包含 <iostream>)。
在有宿主实现中,每个 C++ 库模块表现如同它包含了某个接口单元,该单元定义了一个未导出且具有有序初始化的 这会使得该变量的定义按顺序在 C++ 库模块导入点后的所有声明之前出现。如果程序没有引用任何标准输入/输出流对象,那么它也无法观测到该定义是否存在。 |
(C++23 起) |
成员函数
(构造函数) |
在默认 C++ 流未被初始化的情况下初始化默认 C++ 流 (公开成员函数) |
(析构函数) |
在 *this 是最后要被销毁的实例的情况下清除默认 C++ 流的缓冲区 (公开成员函数) |
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 1123 | C++98 | 构造函数和析构函数的行为依赖了一个仅用于阐述的静态数据成员 init_cnt
|
移除依赖 |
参阅
从标准 C 输入流 stdin 中读取 (全局对象) | |
写入到标准 C 输出流 stdout (全局对象) | |
写入到标准 C 错误流 stderr,无缓冲 (全局对象) | |
写入到标准 C 错误流 stderr (全局对象) |