gpt4 book ai didi

if (!result) 的 C++ 糖语法返回 false;

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:05:34 24 4
gpt4 key购买 nike

在重构一些代码的时候,经常会遇到这样的情况:

bool highLevelFunc foo()
{
// ...
bool result = LesserLevelFunc();
if (!result) return false;
// ... Keep having fun if we didn't return
}

有什么方法可以使它更性感一点并且不那么冗长吗?当然没有任何开销或陷阱。

我能想到一个宏

#define FORWARD_IF_FALSE(r) if (!r) return r;

bool highLevelFunc foo()
{
// ...
FORWARD_IF_FALSE(LesserLevelFunc());
// ...
}

有什么更好的,即没有预处理器宏?

最佳答案

对我来说,“可读”的代码很性感。我发现原始代码比您的建议更具可读性,因为原始代码使用标准 C++ 语法,而后者使用我必须去查找的宏。

如果你想更明确一点,你可以说 if (result == false) (或者更好的是,if (false == result) 来防止可能的赋值作为比较错误),但理解 ! 运算符在我看来是一个相当合理的期望。

也就是说,没有理由将返回值分配给临时变量;你可以很容易地说:

if (!LesserLevelFunc()) return false;

这对我来说非常可读。

编辑:您还可以考虑使用异常而不是返回值来传达失败信息。如果 LesserLevelFunc() 抛出异常,则无需在 highLevelFunc() 中编写任何特殊代码来检查是否成功。异常会通过调用者向上传播到最近的匹配 catch block 。

关于if (!result) 的 C++ 糖语法返回 false;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21237639/

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