Ваш код не на C ++.Он использует функцию языка C (из версии C99 стандарта C), называемую «массивы переменной длины», где массивы в стеке могут иметь длину, определенную во время выполнения.
Массивы переменной длинысчитается опасным и считается довольно плохой идеей;см .:
Почему массивы переменной длины не являются частью стандарта C ++?
Если вы компилируете свой код, говоря компилятору принимать только код, совместимый со стандартом, это не удастся: gcc -std=c++11 -pedantic-error
. Попробуйте это на GodBolt .
В C ++ размер массива устанавливается во время компиляции , точка.Как и другие пользователи, вы можете использовать динамическое выделение, чтобы получить непрерывную область определенной продолжительности в памяти, на ваш выбор размера: используя std::vector
, std::unique_ptr
, std::shared_ptr
или даже простое выделение с new
(хотя последнее не рекомендуется).