Ваша программа некорректна. Размер массива должен быть постоянным времени компиляции, вы используете непостоянную переменную.
Вы используете GCC, который допускает использование массивов переменной длины в качестве расширения языка C ++. Эта функция аналогична массивам переменной длины, стандартным в C99, хотя, как указывает AnT в комментарии , расширение C ++ отличается от стандартного VLA C.
Однако было предложение добавить «Массивы размера времени выполнения с автоматической продолжительностью хранения» в стандарт C ++. Это предложение отличается от расширения GCC тем, что sizeof
массива размера во время выполнения является плохо сформированным (различия не обязательно ограничиваются этим). GCC 4.9 реализовал это предложение в экспериментальном режиме C ++ 14 до того, как предложение было изъято из стандартного проекта.
Итак, ваша программа некорректна во всех официальных стандартных версиях C ++, которые не имеют VLA, но хорошо сформированы в расширенном GNU C ++, который имеет VLA, но снова плохо сформированы в экспериментальном стандарте, реализованном GCC 4.9, который есть массивы размера во время выполнения, но для них нет sizeof
.
Поскольку размер массива постоянен, вы можете сделать свою программу правильно сформированной, просто объявив переменную константу:
const int size = 1e5+10;
Теперь массив размера времени выполнения не используется.