Почему статика должна быть там? - PullRequest
0 голосов
/ 18 марта 2019

Кто-нибудь может уточнить этот кусок кода для меня?Я провел некоторое исследование для понимания ссылок и статики, но я все еще не понимаю, что делает статика в этом примере.И почему он должен быть там в первую очередь (если отсутствует статика, компилятор выдает предупреждение и программа может произойти сбой, почему?).

int & foo(int b)
{
    static int a = 7;


    a += b;
    return a;
}

int main() {

    int & x = foo(0);
    int & y = foo(1);
    cout << (x + y);

}

1 Ответ

7 голосов
/ 18 марта 2019

A static локальная переменная будет иметь время жизни полной программы. Ссылка на него никогда не станет недействительной.

В противном случае нестатические локальные переменные «исчезнут», как только они выйдут из области видимости (что происходит, когда функция вернется), и вы не сможете получить ссылку на то, чего не существует.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...