Mediumexceptions-vs-codes

Когда использовать исключения, а когда коды возврата?

1Постановка

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

2Решение

Исключения — для редких, исключительных ситуаций (файл не найден, сеть упала, нарушение контракта). Коды возврата / `optional` / `expected` — для ожидаемых исходов, часть нормального API.

// Исключение: действительно нештатная ситуация
Config load(const std::string& path) {
    if (!exists(path)) throw std::runtime_error("missing config");
    /* ... */
}

// optional: ожидаемый исход поиска
std::optional<User> findUser(int id) {
    auto it = db_.find(id);
    if (it == db_.end()) return std::nullopt;
    return *it;
}

Правило: вероятность ошибки < 1% и это нарушение контракта → исключение. Часто и часть API → optional/expected/код возврата.

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

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

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