0

I'm surprised that this code compiles and works perfectly without throwing any errors!

int arraysize = 1000;
int array[arraysize];
for(int i=0; i<arraysize; i++)
{
    array[i] = i+1;
}

for(int i=0; i<arraysize; i++)
{
    cout << array[i];
}

Edit: Compiler used: i386-linux-gnueabi-g++ (Linaro GCC 4.5-2012.01) 4.5.4 20120105 (prerelease)

4

2 に答える 2

1

C++ では、配列のサイズは定数でなければなりません。サイズ変数を宣言する場合はconst、それを使用できます。

C では可変長配列 (VLA と呼ばれることもあります) が許可されており、一部の C++ コンパイラはこれらを拡張機能として提供しています。それがあなたのコードが機能する理由です。

通常、std::vector動的サイズの配列が必要な場合は、より安全で移植性の高い代替手段です。

于 2012-09-05T10:06:11.607 に答える
1

これはおそらく、C99 可変長配列を許可するコンパイラ (GCC ?) の機能です。C99 では、次のような配列を定義することが有効です。

int n;
scanf("%d", &n);
int array[n];

C++ は、標準では可変長配列をサポートしていませんstd::vector<>。でコンパイルしてみてくださいg++ -pedantic-errors file.cpp

error: ISO C++ forbids variable-size array ‘array’

可変長配列は C++ クラスをサポートしていないことに注意してください。これは、C++ でそれらを気にせず、代わりにstd::vector<>.

于 2012-09-05T10:06:17.297 に答える