Hardexpectedc++23
Чем try/catch отличается от std::expected (C++23)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
`std::expected<T, E>` — тип-результат: либо значение T, либо ошибка E. Альтернатива исключениям для ожидаемых ошибок, явная в сигнатуре и без overhead.
// expected: ошибка видна в сигнатуре, нет overhead
std::expected<int, ParseError> parseInt(std::string_view s);
auto r = parseInt("42");
if (r) use(*r); // успех
else handleError(r.error());// неудача
// исключение: для редких фатальных
int parseIntOrThrow(std::string_view s); // может бросить- expected — частые ожидаемые ошибки (parse, lookup), композируется через
and_then/or_else; - исключения — редкие фатальные. Аналоги: Rust
Result, HaskellEither.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.