2016-05-02 3 views
0

Читаю C++ Primer плюс на массивах, и он говорит следующееC массив ++, установка ArraySize во время выполнения

typeName arrayName[arraySize]; 
//Arraysize cannot be a variable whose value is set while the program is running" 

Однако, я написал программу

#include <iostream> 

using namespace std;  

int main() 
{ 
    int n; 
    cin>>n; 

    int array[n]; 

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

И это прекрасно работает, Я могу установить размер массива во время выполнения. Я не получаю ошибок компиляции или не запускает время сбоев.

Может кто-нибудь объяснить, что происходит?

Благодаря

ответ

3

Некоторые компиляторы, как г ++ позволяют использовать C variable length arrays и счастливо компилировать код без каких-либо предупреждений или ошибок. Это не стандарт и является расширением для компилятора.

Если вам нужен «массив», и вы не знаете, какой размер будет до времени выполнения, то я предлагаю вам использовать std::vector. Вы можете использовать его как прямую замену массиву, но он позволяет определять размер времени выполнения и предлагает множество других полезных функций.

+0

Это уже не просто расширение компилятора, а часть стандарта C99, позволяющая массивы с переменным размером в стеке. (см. также https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html) – Florian

+1

@Florian C++ не включает все C99. VLA не являются стандартными в любой версии C++ – NathanOliver

+0

wow, которая меня удивляет, но вы правы. Но на самом деле, если вам нужен VLA на C++, вы бы использовали вектор <> в любом случае, не так ли? – Florian

Смежные вопросы