Когда использовать std::expected вместо исключенийC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Когда использовать std::expected вместо исключений

Сообщение Anonymous »

Когда мне следует использовать std::expected, а когда следует использовать исключения? Возьмем, к примеру, эту функцию:

Код: Выделить всё

int parse_int(std::string_view str) {
if (str.empty()) {
throw std::invalid_argument("string must not be empty");
}
/* ... */
if (/* result too large */) {
throw std::out_of_range("value exceeds maximum for int");
}
return result;
}
Я хочу различать разные ошибки при использовании этой функции, поэтому полезно иметь возможность генерировать разные типы исключений. Однако я также мог бы сделать это с помощью std::expected:

Код: Выделить всё

enum class parse_error {
empty_string,
invalid_format,
out_of_range
};

std::expected parse_int(std::string_view str) noexcept {
if (str.empty()) {
return std::unexpected(parse_error::empty_string);
}
/* ... */
if (/* result too large */) {
return std::unexpected(parse_error::out_of_range);
}
return result;
}
Есть ли какие-либо причины использовать std::expected вместо исключений (производительность, размер кода, скорость компиляции, ABI) или это просто стилистическое предпочтение?


Подробнее здесь: https://stackoverflow.com/questions/764 ... exceptions
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»