哪一个工作得更快?

Man*_*emi 0 c++ performance if-statement return

这2个有什么区别吗?

if (condition)
{
    std::cout << "Condition is true";
}
else
{
    std::cout << "Condition is false";
}
Run Code Online (Sandbox Code Playgroud)

或者

if (condition)
{
    std::cout << "Condition is true";
    return 0;
}
std::cout << "Condition is false";
Run Code Online (Sandbox Code Playgroud)

我知道使用第二个是不好的,因为也许你后面还有更多的代码。但是在代码的最后我们没有其他任何东西,使用第二个不是更好吗?

Sha*_*ang 5

我对原始问题进行了如下修改,

void f1() {
    int a = 0;
    if (a > 0) {
        a = 1;
    } else {
        a = 2;
    }
}

void f2() {
    int a = 0;
    if (a > 0) {
        a = 1;
        return;
    } 
    a = 2;
}
Run Code Online (Sandbox Code Playgroud)

这是编译后的程序集。f1()并且f2()几乎相同。

f1():
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-4], 0
        cmp     DWORD PTR [rbp-4], 0
        jle     .L2
        mov     DWORD PTR [rbp-4], 1
        jmp     .L4
.L2:
        mov     DWORD PTR [rbp-4], 2
.L4:
        nop
        pop     rbp
        ret
f2():
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-4], 0
        cmp     DWORD PTR [rbp-4], 0
        jle     .L6
        mov     DWORD PTR [rbp-4], 1
        jmp     .L5
.L6:
        mov     DWORD PTR [rbp-4], 2
.L5:
        pop     rbp
        ret
Run Code Online (Sandbox Code Playgroud)

唯一的区别是.L4有一个nop. 可以在此处找到更多详细信息。

  • 同意。我的观点是,即使在编译器优化之前,它们在汇编级别也没有太大区别。 (4认同)
  • 这就是没有编译器优化的编译程序集。如果没有打开优化,程序集的性能可能会很差 (2认同)