Статическиелокальные переменные Локальные переменные static прямо как
глобальные переменные, только у них
локальная область действия, как показано в следующем коде:
void testFunc()
{
static int runCount = 0; //
это запускается только ОДИН РАЗ, даже при
//
последующем вызове testFunc()!
cout << "
Запустили эту функцию " << ++runCount << " раз" << endl;
} // runCount
больше не области действия, но не прекращает быть активной здесь
int main()
{
testFunc(); //
говорится 1 раз
testFunc(); //
говорится 2 раза!
}
При использовании ключевого слова
static
в
testFunc()
, переменная
runCount
запоминает её значение между вызовами
testFunc()
.
Так что вывод двух отдельных
запусков
testFunc()
будет:
Запустили эту функцию 1 раз
Запустили эту функцию 2 раза
Это потому что статические переменные создаются и обретают начальное
значение только раз (первый раз, когда функция объявлена и запускается), и после
этого статические переменные сохраняют своё старое значение. Скажем, мы
объявляем
runCount
как регулярную, локальную, нестатическую переменную:
int runCount = 0; //
если объявить таким образом, runCount будет локальной
Затем, вывод будет выглядеть так:
Запустили эту функцию 1 раз
Запустили эту функцию 1 раз
Здесь мы видим
testFunc
говорящую: “
Запустили эту функцию 1 раз
”, оба раза. Как у
локальной переменной, значение runCount не сохраняется между вызовами
функции.
Вы не должны злоупотреблять статическими локальными переменными. По факту,
вы должны применять статические локальные переменные лишь, когда это совсем
необходимо.