Можно ли указать переменную в качестве спецификатора размера для статически размещенного целочисленного массива?
Я удивлен, что этот код компилируется и работает отлично, без каких-либо ошибок!
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];
}
Редактировать: Используемый компилятор: i386-linux-gnueabi-g++ (Linaro GCC 4.5-2012.01) 4.5.4 20120105 (предварительная версия)
2 ответа
В C++ размер массива должен быть постоянным. Если бы вы объявили переменную размера const
тогда это можно было бы использовать.
C допускает массивы переменной длины (иногда называемые VLA), и некоторые компиляторы C++ предоставляют их как расширение; вот почему ваш код работает.
Обычно, std::vector
это более безопасная и более портативная альтернатива, если вам нужен массив динамического размера.
Вероятно, это особенность вашего компилятора (GCC?), Которая допускает массивы C99 переменной длины. В 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<>
,