if-else样式和优化

Per*_*-lk 2 c++ optimization if-statement

如果某个函数的行为取决于一系列条件,则可以使用不同的if-return块或一系列if-else块来计算它.示例计算模式:

void f(params) // isolated if-blocks
{
    if (cond1) {
       // computational steps
       return;
    }

    if (cond2) {
       // computational steps
       return;
    }

    // computational steps of last case
 }

 void f() // unique if-else block
 {
    if (cond1) {
       // computation
    } else if (cond2) {
       // computation
    } else { // last condition
       // computation
    }
 }
Run Code Online (Sandbox Code Playgroud)

我会说第一个总是更具可读性,但我不知道第二个是否最好来自设计(易于维护/错误)或性能(分支预测/编译器优化)的观点.

这两种方法的优点和缺点是什么?我没有考虑过其他什么?

Mar*_*k B 6

如果"计算步骤"适当地长(并且有时这根本不需要很长),那么在视觉上很难看出有三个独立的块,每个块都有一个早期的返回.有人可能错误地推断所有三个块都可以在同一个函数调用中运行.

第二版明确指出只能执行一条路径,我相信它的读取和维护要清晰得多.