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 подскажет развёрнутый ответ в реальном времени.