#include <iostream>
using namespace std;
int main(int argc, const char * argv[])
{
int size;
cin >> size;
int myArray[size]; //this shouldn't compile , right ?
return 0;
}
Я думал, что это не скомпилируется, но на самом деле (с помощью команды g ++).Как статический массив с переменным размером работает на C++?
Что я узнал позже, так это то, что GCC фактически позволяет массивы переменного размера, даже если стандартным C++ не поддерживает массивы переменного размера, что странно! Потому что я слышу, как все говорят, что единственный способ создать массив с переменным размером - использовать динамическое размещение, например, int* array = new int[size];
или лучше std::vector
. Я думал, что GCC не позволит этот кусок кода!
Во всяком случае, мой теоретического вопрос, то myArray
массива выделяется в куче или стека области ?
Вы слишком поздно: http://stackoverflow.com/questions/12484588/differences-with-ide-compilers-array-handling. Ваш ответ также находится в связанном сообщении. – chris
бит, память выделяется на стеке. компилятор просто должен генерировать инструкции для увеличения указателя стека для размера * sizeof (int). –
@chris: * Как это делается, отличается от * почему * разрешено в компиляторе. По общему признанию, похоже, что на самом деле намерение не могло понять реализацию, но, скорее, * почему * он компилирует ... –