这两个代码之间存在相当大的优化差异(在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语句的多个鳞状部,节约一个变量(或者至少看起来这样做),但我不知道它真的改变了一些东西...
你不确定这是个好主意......为什么?你有没有任何理性的原因呢?或者你今天早上醒来就是这样吗?您是否尝试检查生成的代码或使用分析工具? – 2014-10-06 16:51:41
许多人主张单一'返回',因为他们认为代码更容易通过。即使我遵循这个建议,当前提条件失败时,我也允许在函数前面提前返回。 – 2014-10-06 17:09:41
经过几次测试之后,编译器只能优化MarkRansom谈到的多重返回语句的种类。在函数中间,优化非常差。 – 2014-10-06 17:28:19