Ответ - да. Вы можете убедиться в этом сами, попытавшись выяснить, что происходит в вашем примере кода. Ключевым моментом является то, что все, что выделяется не динамически, должно иметь фиксированный размер во время выделения.
У вас нет указателя здесь, поэтому основная структура данных вектора распределяется в стеке, где он не может просто перерасти в другие вещи, которые потенциально находятся над ним в стеке. Например, пока вы находитесь внутри func()
, вызов функции func
находится в стеке поверх вашей векторной переменной. Он не может расти там без перезаписи стекового фрейма для вашего вызова функции. Если это так, ваша программа вылетит при попытке вернуться с func
.
Таким образом, единственный способ, которым он может расти, - это если внутренне динамически распределять память в другом месте по мере необходимости. Итак, это должно быть то, что происходит под капотом.