首页 > 解决方案 > 哪一个工作得更快?

问题描述

这2个有区别吗?

if (condition)
{
    std::cout << "Condition is true";
}
else
{
    std::cout << "Condition is false";
}

或者

if (condition)
{
    std::cout << "Condition is true";
    return 0;
}
std::cout << "Condition is false";

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

标签: c++performanceif-statementreturn

解决方案


我将原始问题修改如下,

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;
}

这是编译的程序集。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

唯一的区别是.L4有一个nop. 更多细节可以在这里找到。


推荐阅读