【问题标题】:Difference between nested if (condition) and logical operator嵌套if(条件)和逻辑运算符之间的区别
【发布时间】:2025-12-07 16:10:01
【问题描述】:

嵌套if(条件)和逻辑运算符在性能和逻辑方面有什么区别。

if(a && b && c){
 //do something 
 }

if(a){
   if(b){
         if(c){
       //do something
     }
   }
 }

上面的代码在逻辑上是否相同? 我主要关心的是代码的性能,性能方面哪个最好用?

【问题讨论】:

    标签: performance if-statement logic operator-keyword logical-operators


    【解决方案1】:

    如果您尝试将这两个代码转换为assembly 语言(非常接近机器语言),则两个代码将转换完全相同(first codesecond code):

    C

    void Main(){
        int a=1, b=2, c= 3, res = 0;
    
        if(a && b && c)
            res = 100;
    }
    
    // or
    void Main(){
        int a=1, b=2, c= 3, res = 0;
    
        if(a)
            if(b)
                if(c)
                    res = 100;
    }
    

    汇编输出

    Main():
            push    rbp
            mov     rbp, rsp
            mov     DWORD PTR [rbp-4], 1
            mov     DWORD PTR [rbp-8], 2
            mov     DWORD PTR [rbp-12], 3
            mov     DWORD PTR [rbp-16], 0
            cmp     DWORD PTR [rbp-4], 0
            je      .L3                     ; jump to the end if `a` is not true
            cmp     DWORD PTR [rbp-8], 0
            je      .L3                     ; jump to the end if `b` is not true
            cmp     DWORD PTR [rbp-12], 0
            je      .L3                     ; jump to the end if `c` is not true
            mov     DWORD PTR [rbp-16], 100 ; otherwise do something
    .L3:
            nop
            pop     rbp
            ret
    

    【讨论】: