Iが含まiostream
ヘッダと「)(主空」をに周りgodbolt.orgを再生し、そしていくつかの"extra code"はと、コンパイラによって追加気づきました。使用
は基準に見た後、私はそれらを構造に必要とされている考え出し、彼らは既に初期化/構築されていない場合は、オブジェクト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