Статические объекты в C++

В языке программирования C++ существует особый тип локальных объектов -- статический. Речь идет об объектах, которые определяются на уровне функций посредством ключевого слова static. Если, к примеру, автоматические переменные определяются и инициализируются во время каждого входа в функцию, то статические инициализируются лишь один раз, причем при последующих вызовах функции применяется старое значение статической переменной.

Представим, что у нас есть функция, включающая в себя стандартную автоматическую переменную:

В нашем случае функция display вызывается 3 раза, причем при каждом вызове программа выделяет память для переменной i (переменная i определена в нашей функции). После завершения работы функции display память для нашей переменной i будет высвобождаться. В результате ее значение будет неизменно при каждом вызове:

Итак, с автоматической переменной все понятно. Теперь рассмотрим ситуацию, когда переменная i является статической:

Как видно из кода выше, мы добавили к переменной ключевое слово static. Теперь при завершении работы функции display наша переменная не уничтожается, и ее память не очищается, то есть переменная сохраняется в памяти. В результате работа программы тоже изменится:

По материалам https://metanit.com/cpp/.