3

配列の作成中に、コンパイラはそのサイズを知る必要がありますか? たとえば、次のコード スニペットはコンパイルされません。

class A
{
   int n;
   int arr[n];
};  

しかし、以下はコンパイルされます。

int main()
{
  int n;

  std::cin >> n;
  int arr[n];
}

なんで?

4

4 に答える 4

5

標準 C++ は可変長配列をサポートしていません。1

この動作が必要な場合std::vectorは、生の C スタイルの配列ではなく、 を使用することをお勧めします。


1. ただし、C99 または非標準の言語拡張でそれらを見つけることができます。

于 2012-06-17T15:04:47.847 に答える
4

(1) A のインスタンスを作成するときに最初に行われるのはメモリの割り当てです。その時点ではメンバーnは存在しないため、必要なメモリ量を知ることは不可能arrです。

(2) スタック上に配列を作成します。これは、スタックポインタを少し移動するだけです。

于 2012-06-17T15:07:44.453 に答える
1

可変サイズの配列を作成したい場合は、 を使用してヒープ上で作成する必要がありますnew。整数を定数として宣言した場合は、これをそのまま使用できる唯一の方法です。

于 2012-06-17T15:06:03.877 に答える
0

コンパイルの時点では、変数 n の値は不明です (指定されたアドレスの下のメモリにあったものです)。そのため、未知のサイズの変数を作成することはできません。2 番目のケースでは、cin (sin ではなく) を使用したため、サイズがわかります。

于 2012-06-17T15:04:48.723 に答える