10

関数内の静的変数は、プログラムの存続期間中に一度だけ割り当てられます。

したがって、次のような関数がある場合:

void f(int n) {

  static int *a = new int[n];

}

そして私は最初に電話します

f(1)

その後

f(3)

2回目の呼び出し後、配列はどのくらいの大きさになりますか?

4

4 に答える 4

7

static関数のローカル変数は、最初に制御が渡されるときに初期化されます。標準の関連セクションは 6.7 [stmt.dcl] です。つまり、配列はサイズ 1 を取得し、サイズを明示的に変更しない限り、このサイズを維持します。

C++ 2011 の優れている点は、static変数の初期化もスレッド セーフであることです。変数の初期化中に別のスレッドがインスタンスに到達すると、2 番目のスレッドは初期化が完了するまでブロックされます。

于 2012-11-20T19:37:03.600 に答える
6

staticローカル変数は、制御フローが最初に宣言に到達したときに初期化されます。この場合、パラメータとして初めて使用1したときから、1nつの にサイズを割り当てますint

このようなことをするのは悪い考えです。ローカル、非静的、std::vectorまたはその他の高レベルのコンテナーを使用する必要があります。

于 2012-11-20T19:38:06.110 に答える
0

変数 'a' の初期化は関数 'f' が最初に呼び出されたときに 1 回だけ行われるため、配列のサイズは 1 になります。

于 2012-11-20T20:02:36.167 に答える