Mediumинициализация

Что такое zero-initialization и когда оно происходит?

1Постановка

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

2Решение

Zero-init — инициализация нулём (0 для целых, 0.0 для double, null для указателей, false для bool). Происходит автоматически для статических и глобальных переменных. НЕ происходит для локальных переменных встроенных типов — там значение неопределённое, чтение — UB.

int global;             // 0 (zero-init, static storage)
static int s;           // 0 (static storage)

void f() {
    int local;          // НЕ инициализирована — чтение UB
    int x{};            // 0 (value-init через {})
    int* p = new int(); // 0 (скобки дают value-init)
    int* q = new int;   // НЕ инициализирован
}

Частый источник неопределённого поведения — забыть инициализировать локальный int/bool/указатель. Пишите int x{}; или int x = 0;.

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

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

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