10
void method(string a) {
  int n = a.size();
  int array[n];
}

上記のコードは、gcc を使用して正しくコンパイルできます。配列のサイズは、どのようにして非定数変数から取得できますか? コンパイラは自動的に を に変換int array[n]int* array = new int[n]ますか?

4

3 に答える 3

6

配列のサイズは、どのようにして非定数変数から取得できますか?

現在、そのコンパイラには非標準の拡張機能があり、C++ プログラムで C の可変長配列を使用できるようになっているためです。

コンパイラは自動的に を に変換int array[n]int* array = new int[n]ますか?

それは実装の詳細です。通常の自動変数のように、GCC はそれをスタックに配置すると思います。スタックに対してサイズが大きすぎる場合、動的割り当てを使用する場合と使用しない場合があります。私は自分自身を知りません。

于 2013-10-20T03:39:16.870 に答える
1

動的割り当て。newキーワードは、ポインターといくつかの割り当てを使用してこれを行います。

int * ptr;
int n = a.size();
ptr = new int[n];
于 2013-10-20T03:33:39.110 に答える