Hardисключения

Что такое function try block?

1Постановка

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

2Решение

Function try block — try-catch, оборачивающий всё тело функции (или initializer list конструктора). В основном для конструкторов, чтобы поймать исключения из initializer list.

// Обычная функция
int parse(const std::string& s) try {
    return std::stoi(s);
} catch (const std::exception& e) {
    std::cerr << e.what();
    return -1;
}

// Конструктор: ловит исключения из initializer list
Foo::Foo() try
    : member_(expensive()), data_(loadFile()) {
    // тело конструктора
} catch (const std::exception& e) {
    log(e);
    throw;  // ВАЖНО: из ctor function-try-block нельзя «вернуть» объект
}

Важно: из function try block конструктора нельзя вернуть объект (он ещё не создан) — любое пойманное исключение автоматически перепрокидывается. Поэтому основная польза — логирование/трансформация исключения.

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

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

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