Rust 有一个?用于错误传播的运算符,无一例外。当函数返回ResultorOption类型时,可以这样写:
let a = get_a()?;
Run Code Online (Sandbox Code Playgroud)
这实际上意味着:
let _a = get_a();
let mut a = match _a {
Ok(value) => value,
Err(e) => return Err(e),
}
Run Code Online (Sandbox Code Playgroud)
或者,换句话说,如果返回值包含错误,该函数将返回并传播错误。所有这些都发生在一个字符中,因此代码很紧凑,没有太多if (err) return err分支。
C# 中也存在相同的概念:空条件运算符
在 C++ 中,我能找到的最接近的东西是tl::expected和 Boost.outcome。但这两个需要使用例如 lambda 来实现相同的目标,并且它不那么简洁。据我了解,影响这样的控制流需要某种语言功能或扩展。
我试图找到一个能够实现它或至少与之相关的提案,但没有找到。是否有实现它的 C++ 提案?