if-else vs如果表现

Gar*_*ain -5 c++ performance if-statement

假设我想要一个从任何设备接受数字输入的程序,如果该数字为0则返回-1,但在所有其他情况下继续执行该程序.

在C++中,该代码的一部分将是:

int main() {
    if(number == 0) return -1;
    /*
        Here the rest of the program
    */
    return 0; // End of program
}
Run Code Online (Sandbox Code Playgroud)

要么

int main() {
    if(number == 0) return -1;
    else {
        /*
            Here the rest of the program
        */
    }
    return 0; // End of program
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,这些代码部分中哪一个更有效?

是的,我只是谈论这个确切的情况,当你需要退出程序,如果它满足一定的条件.

Ada*_*zyk 5

由于生成的代码完全相同,因此没有性能差异:

$ echo "int main() { int number; if (number == 0) return -1; return 0; }" | g++ -x c++ -S - -o /dev/stdout | md5sum
9430c430d1f748cc920af36420d160ce  -

$ echo "int main() { int number; if (number == 0) return -1; else {} return 0; }" | g++ -x c++ -S - -o /dev/stdout | md5sum
9430c430d1f748cc920af36420d160ce  -

$ echo "int main() { int number; if (number == 0) return -1; else {} return 0; }" | g++ -x c++ -S - -o /dev/stdout 
    .file   ""
    .text
    .globl  main
    .type   main, @function
main:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    cmpl    $0, -4(%rbp)
    jne .L2
    movl    $-1, %eax
    jmp .L3
.L2:
    movl    $0, %eax
.L3:
    popq    %rbp
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE0:
    .size   main, .-main
    .ident  "GCC: (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4"
    .section    .note.GNU-stack,"",@progbits
Run Code Online (Sandbox Code Playgroud)