std::ios_base::Init

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

此类用以确保默认 C++ 流(std::cinstd::cout 等)会被正确初始化及析构。该类会跟踪它被创建的实例数量,在构造首个实例时创建并初始化 C++ 流,并且在析构最后实例时清除输出流缓冲区。

标头 <iostream> 表现如同它定义(直接或间接)一个有静态存储期的 std::ios_base::Init 实例:这使得在具有有序初始化的静态对象的构造函数及析构函数中,访问标准输入/输出流是安全的(只要在翻译单元中,定义该对象前包含 <iostream>)。

有宿主实现中,每个 C++ 库模块表现如同它包含了某个接口单元,该单元定义了一个未导出且具有有序初始化std::ios_base::Init 变量。

这会使得该变量的定义按顺序在 C++ 库模块导入点后的所有声明之前出现。如果程序没有引用任何标准输入/输出流对象,那么它也无法观测到该定义是否存在。

(C++23 起)

成员函数

(构造函数)
在默认 C++ 流未被初始化的情况下初始化默认 C++ 流
(公开成员函数)
(析构函数)
*this 是最后要被销毁的实例的情况下清除默认 C++ 流的缓冲区
(公开成员函数)

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 1123 C++98 构造函数和析构函数的行为依赖了一个仅用于阐述的静态数据成员 init_cnt 移除依赖

参阅

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