Optimization 使用多返回语句 这两个代码在爪哇和/或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; }

Optimization 使用多返回语句 这两个代码在爪哇和/或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; },optimization,return,Optimization,Return,及 第一个比较短,避免else语句的多次重复,节省一个变量(或者至少看起来是这样),但我不确定它是否真的改变了什么…当然,多次返回是可以接受的。 由于您可以在深入查看GCC生成的不同汇编代码后,在函数完成后立即停止程序,因此结果如下: 在“正常”编译期间,multiple return语句的效率更高,但使用-O_u标志时,余额会发生变化: 您对代码的优化越多,第一种方法的价值就越低。这使得代码更难优化,因此,请谨慎使用。正如注释中所说的,当测试前提条件时,它在函数前面使用是非常强大的,但是在函数


第一个比较短,避免else语句的多次重复,节省一个变量(或者至少看起来是这样),但我不确定它是否真的改变了什么…

当然,多次返回是可以接受的。
由于您可以在深入查看GCC生成的不同汇编代码后,在函数完成后立即停止程序,因此结果如下:

在“正常”编译期间,multiple return语句的效率更高,但使用-O_u标志时,余额会发生变化:


您对代码的优化越多,第一种方法的价值就越低。这使得代码更难优化,因此,请谨慎使用。正如注释中所说的,当测试前提条件时,它在函数前面使用是非常强大的,但是在函数的中间,编译器是一个噩梦。为什么?你有什么合理的理由吗?或者你今天早上醒来时就有这种感觉?您是否尝试过检查生成的代码或使用分析工具?许多人主张使用单一的
返回
,因为他们认为代码更容易推理。即使我遵循这个建议,我也允许在前置条件失败时在函数前面提前返回。经过几次测试,编译器只能优化MarkRansom所说的那种多重返回语句。在函数的中间,优化是非常差的。
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;
}