这两个代码之间的优化是否存在相当大的差异(在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语句并节省一个变量(或者至少似乎这样做),但我不确定它是否真的改变了某些东西......
答案 0 :(得分:1)
在深入研究GCC生成的不同汇编代码之后,结果如下:
多个return语句在" normal"期间效率更高。编译,但使用-O_标志,余额更改:
优化代码的次数越多,第一种方法的价值就越少。它使代码更难以优化,因此,请谨慎使用它。正如在评论中所说,当在测试前置条件时在函数的前面使用它时非常强大,但是在函数的中间,它对于编译器来说是一场噩梦。
答案 1 :(得分:0)
当然多次退货是可以接受的。 因为您可以在功能完成后立即暂停程序