我打得周围godbolt.org,并注意到由编译器增加了一些"extra code"与“空的main()”与iostream
头里面包含使用静态数据。iostream头
寻找到标准之后,我想通这些都需要构造并初始化cin
,cout
,cerr
,clog
,wcin
,wcout
,wcerr
和wclog,
如果他们没有已建成/初始化的对象。
N4606:§27.5.3.1.6
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 }; }
但对于static
数据所有的标准说,它计算的构造函数和析构函数调用的class Init
数量,并初始化为零。
2为表述起见,保持数据这里介绍 为:(2.1) - 静态INT init_cnt,计算构造的 析构函数调用类初始化,初始化为零的数量。
我没有得到的是static int init_cnt;
这里有什么用? 为什么我们需要计算构造函数/析构函数的调用次数?
看起来像它只用于刷新最后一个销毁(来自cppreference):*类跟踪创建了多少个实例,并在构造第一个实例时初始化C++流以及刷新输出当最后一个实例被破坏时流出。* – NathanOliver
https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Nifty_Counter解释了一些 – jcoder