gpt4 book ai didi

c++ - 如何在 if 语句中结合否定和声明?

转载 作者:太空狗 更新时间:2023-10-29 20:54:39 25 4
gpt4 key购买 nike

当使用 C 风格的返回码来指示错误时,很常见的是这样的代码:

if (do_something()) {
do_something_else();
} else {
report_failure();
}

有时,如果一个 block 比另一个 block 大得多,您可能希望在“do_something_else” block 之前重新排序“handle failure” block 。

if (!do_something()) {
report_failure();
} else {
do_something_else();
}

(或者,当它真的是 C 代码时,代码可能是 0 表示成功而不是失败,但让我们忽略它。)

当我使用像 boost::optional 这样的 C++ 习语或建议的 std::expected 类型之一时,通常我想做的是在if 语句的条件:

if (auto ok = do_something()) {
do_something_else(*ok);
} else {
report_failure(ok.error());
}

我喜欢这样做,因为这样,ok 就严格包含在范围内,在两个 block 之外是不可见的。

但是,一旦我这样做了,我就不能根据需要重新排序这两个分支,这可能比它应该的更让我烦恼,但仍然如此。

我真正想要的是语法

if not (auto ok = do_something()) {
report_failure(ok.error());
} else {
do_something_else(*ok);
}

但据我所知这实际上不起作用。

有什么技巧可以做到吗?

最佳答案

C++17将介绍这种语法:

if (auto ok = do_something(); !ok) {
report_failure(ok.error());
} else {
do_something_else(*ok);
}

这基本上就是您想要的。

它在 feature-complete draft 中.

关于c++ - 如何在 if 语句中结合否定和声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38424949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com