具有多个if或具有"大"返回的函数?

use*_*491 2 c c++ optimization return conditional-statements

我想知道这两个解决方案中的一个是否优于另一个:

版本1:

bool myFunction()
{
    if (A)
        return false;
    if (B)
        return false;
    if (C)
        return false;
    if (D)
        return false;

    return true;
}
Run Code Online (Sandbox Code Playgroud)

版本2:

bool myFunction()
{
    return (!A && !B && !C && !D);
}
Run Code Online (Sandbox Code Playgroud)

我猜测版本2可能效率稍低,因为我们可能需要计算整个布尔表达式以了解它是真还是假.在第一个版本中,如果A为false,则返回false,而不计算B,C或D.但我发现第二个版本更具可读性.

那么最好的方法是什么?

谢谢.

Jon*_*eet 6

在第一个版本中,如果A为假,则返回false,而不计算B,C或D.

对于第二个版本也是如此.该&&运营商短路 -如果第一个操作false,也不会计算第二个操作数.

但是,我要么从第二个版本中删除括号:

return !A && !B && !C && !D;
Run Code Online (Sandbox Code Playgroud)

或将其反转为:

return !(A || B || C || D);
Run Code Online (Sandbox Code Playgroud)

...取决于你发现哪个更容易阅读.我个人更喜欢尽可能少的否定.(||也是短路,所以它们的效率相当.)

请注意,原则上不要避免使用多个return语句 - 有很多时候使用多个return语句会提供更易读的代码.瞄准最可读的代码,只有当您已经证明最易读的方法不能满足您的需求时,才会担心效率问题.在这种情况下,这些方法同样有效,因此无论如何也不是问题.