如果逻辑上是可选的,我应该用`else {return ...}`封装最后一个`return`语句吗?

时间:2012-09-19 19:18:33

标签: c++ performance optimization if-statement code-size

哪种格式在速度,性能和机器代码尺寸方面更好?

最后return已封装:

static bool MyClass::IsEqual(int A, int B)
{
    if (A == B)
    {
        return true;
    } 
    else
    {
        return false;
    }
}

最后return未封装:

static bool MyClass::IsEqual(int A, int B)
{
    if (A == B)
    {
        return true;
    }
    return false;
}

4 个答案:

答案 0 :(得分:6)

回答你的问题 - 生成并查看汇编程序代码。我敢打赌汇编代码是相同的 - 因此性能没有差别。

我会尽可能删除if/else,考虑到我的例子:

static bool MyClass::IsEqual(int A, int B)
{
    return (A == B);
}

但我知道现实世界的例子并不像这样简单。

答案 1 :(得分:5)

  

哪种格式在速度,性能和机器代码尺寸方面更好?

它们应该全部相同或接近它。而且,你提出了错误的问题。

更好的问题是,

  

我应该选择哪个?为什么?

请记住,C ++代码旨在由读取,而非机器。鉴于此,选择一种编码风格而不是另一种编码风格的主要动机应该是它对人类的可读性。同样重要的是,它也是不可思议的主观。最重要的是你必须自己决定哪个更好,但重要的是你正确的问题是正确的问题,并考虑答案。

答案 2 :(得分:2)

两个代码片段应该产生完全相同的结果,因此它们不是任何一个的参数。

真正决定使用哪种版本的是编码风格。 if / else变体的优点是两个分支都位于同一逻辑层。有时,这可能是以这种方式编写它的一个很好的理由。

答案 3 :(得分:1)

第二种形式略微可读,因为它降低了嵌套级别。使用一种形式或其他形式绝对没有性能损失。