C++ 在iostream头中使用静态数据
我在godbolt.org上玩的时候,注意到编译器添加了一些“空main()”,其中包含C++ 在iostream头中使用静态数据,c++,iostream,C++,Iostream,我在godbolt.org上玩的时候,注意到编译器添加了一些“空main()”,其中包含iostreamheader 在研究了标准之后,我发现需要这些标准来构造和初始化对象cin,cout,cerr,clog,wcin,wcout,wcerr,以及wclog,,如果它们尚未构造/初始化 N4606:§27.5.3.1.6 但是对于静态数据,该标准所说的全部内容是计算类Init的构造函数和析构函数调用的数量,并将其初始化为零 2为便于说明,此处提供了维护数据 as:(2.1)-静态int init
iostream
header
在研究了标准之后,我发现需要这些标准来构造和初始化对象cin
,cout
,cerr
,clog
,wcin
,wcout
,wcerr
,以及wclog,
,如果它们尚未构造/初始化
N4606:§27.5.3.1.6
但是对于静态
数据,该标准所说的全部内容是计算类Init
的构造函数和析构函数调用的数量,并将其初始化为零
2为便于说明,此处提供了维护数据
as:(2.1)-静态int init_cnt,统计构造函数和
析构函数调用初始化为零的类Init
我不明白的是static int init\u cnt的用途是什么代码>这里?
为什么我们需要计算调用构造函数/析构函数的次数?基于我认为如果需要那么在调用全局变量析构函数时,最后的程序可以正确地析构函数cin、cout、cerr、clog、wcin、wcout、wcerr和wclog
发件人:
~Init()
影响:
销毁类Init的对象。该函数从中减去一
存储在init_cnt中的值,如果生成的存储值为
第一,调用cout.flush()、cerr.flush()、clog.flush()、wcout.flush(),
wcerr.flush(),wclog.flush()
基于此,我认为如果需要那么在调用全局变量的析构函数时,最后的程序可以正确地析构函数cin、cout、cerr、clog、wcin、wcout、wcerr和wclog
发件人:
~Init()
影响:
销毁类Init的对象。该函数从中减去一
存储在init_cnt中的值,如果生成的存储值为
第一,调用cout.flush()、cerr.flush()、clog.flush()、wcout.flush(),
wcerr.flush(),wclog.flush()
看起来它只用于最后一次销毁(从CPPYPE)刷新:该类跟踪在创建第一个实例时创建了多少个实例并初始化C++流,以及在最后一个实例被破坏时刷新输出流。解释一些看起来像是只用于最后一次销毁(从CPPYPE)刷新:该类跟踪在创建第一个实例时创建了多少个实例并初始化C++流,以及在最后一个实例被破坏时刷新输出流。解释了其中的一些
27.5.3.1.6 Class ios_base::Init [ios::Init]
namespace std {
class ios_base::Init {
public:
Init();
~Init();
private:
static int init_cnt; // exposition only
};
}