Я пытаюсь понять разницу между статическими и динамическими массивами в С++, и я не могу придумать случай, когда статический массив не помог бы.
Я рассматриваю статический массив, который будет объявлен следующим образом:
int N=10;
int arr[N];`
Я прочитал здесь, что основное различие между статическим и динамическим массивом заключается в том, что статический массив выделяется во время компиляции, поэтому N необходимо знать при компиляции.
Однако это объясняет, что массивы, объявленные таким образом, также могут быть массивами переменной длины:
Массивы переменной длины были добавлены в C99 — они ведут себя в основном как массивы фиксированной длины, за исключением того, что их размер устанавливается во время выполнения; N не обязательно должно быть константным выражением времени компиляции:`
и действительно, следующий код С++ работает, хотя n
известен только во время выполнения:
int n =-1;
std::cin>>n;
int arr[n];
//Let the user fill the array
for(int i=0; i<n;i++){
std::cin>>arr[i];
}
//Display array
for(int i=0; i<n;i++){
std::cout<<i<<" "<<arr[i]<<std::endl;
}
Итак, я хотел бы привести пример кода, в котором статические массивы, определенные таким образом, не будут работать, и потребуется использование динамического массива?
-pedantic
, если вы используете gcc/clang, и вы обязательно получите сообщение об ошибке. - person NathanOliver   schedule 04.02.2019std::array
иstd::vector
. - person Matthieu Brucher   schedule 04.02.2019-pedantic
я получил как минимум предупреждение вgcc
иclang
. (Конечно, с-pedantic-errors
это стало ошибкой.) MSCV отклонено с ошибкой (как уже упоминалось @Blaze). - person Scheff's Cat   schedule 04.02.2019