static
ローカル変数に適用すると、その変数に静的ストレージ期間が与えられます。これは、justAbool
の存続期間が、関数の呼び出しの最後までではなく、プログラムの最後まで続くことを意味します。宣言が表示された後、スコープは同じままで、関数内で名前によってのみアクセスできます。
justAbool
= false
関数が最初に呼び出されたときに(提供された初期化子を使用して) 初期化されます。その後、以前の値を保持し、関数が再度呼び出されたときに再初期化されません。
ここでは、標準への参照とともに、保存期間と有効期間に関する詳細をいくつか示します。
オブジェクトにstatic storage durationがある場合、オブジェクトのストレージはプログラムの期間中 (開始から終了まで) 持続することを意味します。(3.7.1 [basic.stc.static])
abool
は重要なコンストラクターを持たない型であるため、その寿命はストレージの寿命を反映しています。つまり、プログラムの最初から最後まで存続します。(3.8 [基本ライフ])
静的ストレージ期間を持つすべてのオブジェクト(ローカル オブジェクトを含む) は、他の初期化の前にゼロで初期化されます。(6.7/4 [stmt.decl]) [初期化子を持つローカル オブジェクトの場合、宣言に到達する前に値を読み取る方法がないため、これはかなり学術的です。]
定数式で初期化された静的ストレージ期間を持つ POD 型のローカル オブジェクトは、ブロックに入る前に初期化されます。それ以外の場合、静的ストレージ期間を持つローカル オブジェクトは、制御が宣言を通過するときに初期化されます。(再び 6.7/4)
実装は、状況によっては早期初期化を実行することを許可しますが、必須ではありません。