使用多个return语句

时间:2014-10-06 16:46:37

标签: optimization return

这两个代码之间的优化是否存在相当大的差异(在Java和/或C ++中,即使我猜它在每种语言中都相同)?或者只是代码可读性的问题?

int foo(...) {
    if (cond) {
        if (otherCondA)
            return 1;
        if (otherCondB)
            return 2;
        return 3;
    }
    int temp = /* context and/or param-dependent */;
    if (otherCondA)
        return 4 * temp;
    if (otherCondB)
        return 4 / temp;
    return 4 % temp;
}

int foo(...) {
    int value = 0;
    if (cond) {
        if (otherCondA)
            value = 1;
        else if (otherCondB)
            value = 2;
        else value = 3;
    }
    else {
        int temp = /* context and/or param-dependent */;
        if (otherCondA)
            value = 4 * temp;
        else if (otherCondB)
            value = 4 / temp;
        else
            value = 4 % temp;
    }
    return value;
}

第一个更短,避免多次使用else语句并节省一个变量(或者至少似乎这样做),但我不确定它是否真的改变了某些东西......

2 个答案:

答案 0 :(得分:1)

在深入研究GCC生成的不同汇编代码之后,结果如下:

多个return语句在" normal"期间效率更高。编译,但使用-O_标志,余额更改:

优化代码的次数越多,第一种方法的价值就越少。它使代码更难以优化,因此,请谨慎使用它。正如在评论中所说,当在测试前置条件时在函数的前面使用它时非常强大,但是在函数的中间,它对于编译器来说是一场噩梦。

答案 1 :(得分:0)

当然多次退货是可以接受的。 因为您可以在功能完成后立即暂停程序