Mediumstatic

Что такое static-локальная переменная функции?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Static-локальная существует всю программу, но доступна только внутри функции. Инициализируется при первом вызове; с C++11 — гарантированно thread-safe.

int nextId() {
    static int id = 0;   // инициализируется один раз
    return id++;
}

// Ленивый singleton (Meyers)
Logger& Logger::instance() {
    static Logger inst;   // thread-safe init (C++11)
    return inst;
}

Стоимость: первый вызов — atomic check + init, последующие — лёгкий atomic check. Минус: глобальное mutable state, сложнее тестирование. Thread-safety касается только инициализации, не всех вызовов функции.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.