- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:クラス内の関数内static変数について)
クラス内の関数内static変数の初期化タイミングはいつでしょうか?
このQ&Aのポイント
- クラス内の「staticではないメンバ関数内で定義される」static変数の初期化タイミングについて調査しました。
- 実験結果から、クラス内の静的変数は実際にはクラススコープの変数であり、インスタンスごとに個別の領域を持つことがわかりました。
- したがって、複数のインスタンスで共有されるのではなく、各インスタンスで個別に初期化されることが原因と考えられます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
C++では、メンバ関数は、「暗黙の引数 this(インスタンスを指すポインタ)を持つ関数」に過ぎません。 実際に、インスタンスの生成とは関係なく存在しています。 なので、内部static変数の初期化は、最初に関数が呼ばれたときということになります。 逆に、「そのインスタンスに固有の情報」は、やはり、メンバ変数として持たないとだめということになります。
その他の回答 (2)
- vipasigaru
- ベストアンサー率38% (16/42)
回答No.3
1.インスタンスの時に生成されるのはクラスのメンバ変数です。staticではありません したがって貴方の求めた振る舞いをするのはメンバ変数です。 2.メンバstatic変数と関数内のstatic変数は、初期化以外は同じです。 メンバ変数はstatic変数の値の定義の仕方で変わりますが、大体関数外にstatic変数作った時と振る舞いが同じです。 関数内のstatic変数は、非クラスのものと同じ働きをします。したがって、最初に呼び出された時にインスタンスが生成されます。
質問者
お礼
どうも私の疑問は、初期化タイミングというよりメンバ関数やstatic変数がどこにどう取られるのか、というようなものだったようです。 回答については了解です、ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.2
原則は「最初にそこに到達したとき」だったような気がする.
お礼
なるほど、つまりメンバ関数の実体はインスタンス毎に用意される訳ではないので、staticな変数はクラス単位で共有化(?)されてしまうということですかね。そう考えれば納得できます。 ありがとうございました。