提问人:Jan Schultke 提问时间:6/13/2023 最后编辑:Jan Schultke 更新时间:9/15/2023 访问量:190
何时使用 std::expected 而不是异常
When to use std::expected instead of exceptions
问:
何时应使用 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<int, parse_error> 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;
}
是否有任何理由使用异常(性能、代码大小、编译速度、ABI),或者只是风格偏好?std::expected
答: 暂无答案
评论
std::expected
std::expected
std::expected
bool
std::expected
std::expected
只是一个结构。你是对的,这只是一颗糖。“何时使用”链接的答案中不能添加任何新内容。std::expected
std::expected
std::expected