
11.7
初期化
183
11.6.3
自動記憶域期間
関数内で記憶域クラス指定子なしで(または不必要な指定子
auto
で)定義されたオブジェ
クトは自動記憶域期間を持つ。関数引数も自動記憶域期間を持つ。自動記憶域期間を持つ
オブジェクトは一般に自動変数と呼ばれる。
自動オブジェクトの生存期間はオブジェクトが定義されたブロックの開始終了波括弧
(
{}
)に限定される。可変長配列は例外で、生存期間が宣言時に始まり、識別子のスコープ、
すなわち宣言を含むブロックの終わりまたは宣言の前の点にジャンプしたところで終わる。
プログラム実行フローがブロックに入るたびに、ブロックで定義された自動オブジェク
トの新たなインスタンスが作られる(宣言に初期化子があれば初期化もされる)。この事実
は、例えば、再帰関数では重要となる。
11.7
初期化
宣言に初期化子を含めることでオブジェクトの初期値を明示的に指定できる。初期化子
なしで定義されたオブジェクトは
不定の初期値を持つかコンパイラで暗黙初期化される。
11.7.1
暗黙初期化
自動記憶域期間を持つオブジェクトは定義が初期化子を含まないと不定の初期値を持つ。
関数の引数は、自動記憶域期間を持つが関数呼び出し時に渡された引数値で初期化される。
他のオブジェクトはすべて静的記憶域期間を持ち、定義が明示的初期化子を含まない限り、
デフォルト値0で暗黙初期化される。より正確には次のようになる。
●
算術型のオブジェクトはデフォルト初期値0
●
ポインタオブジェクトのデフォルト初期値はナル