小编Vla*_*nov的帖子

有提案吗?C++ 的运算符/空条件运算符?

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++ 提案?

c++ c++20

3
推荐指数
1
解决办法
978
查看次数

标签 统计

c++ ×1

c++20 ×1