Ternary operator if语句中的三元

Ternary operator if语句中的三元,ternary-operator,Ternary Operator,我看过这个问题:,但它并没有真正为我提供一个解决这个问题的答案 我一直在if语句中使用三元,因为据我所知,它提供了更多的逻辑,实际工作所需的操作更少。这类语句的一个例子是:如果a=='foo'?b!='poo':true,当然可以替换为if a='foo'&&b!='呸福'。如果比较运算的数量-三元的是1和2,非三元的是2和3,当然这是一个简单的例子-我也可以创建一个差异大于1的例子,它也比非三元的干净,至少对我来说;然而,我的同事一直在问我为什么要采用这样的惯例 除了可读性之外,在条件句中使用

我看过这个问题:,但它并没有真正为我提供一个解决这个问题的答案

我一直在if语句中使用三元,因为据我所知,它提供了更多的逻辑,实际工作所需的操作更少。这类语句的一个例子是:如果a=='foo'?b!='poo':true,当然可以替换为if a='foo'&&b!='呸福'。如果比较运算的数量-三元的是1和2,非三元的是2和3,当然这是一个简单的例子-我也可以创建一个差异大于1的例子,它也比非三元的干净,至少对我来说;然而,我的同事一直在问我为什么要采用这样的惯例


除了可读性之外,在条件句中使用三元组还有什么需要注意的吗?我还在考虑一个问题?BCd:e:f:g解析不人道的事情?

在if语句中使用三元组是个坏主意,如果不是出于意外的原因。这在逻辑上也更难理解——我在心里把你的三元组转换成了一个条件,因为这样想更有意义。如果我考虑条件,我会考虑和或,而不是如果。。。然后我想大多数开发者都会同意我的观点

最后,看看拆解。使用OSX上的叮当声,它们是相同的,除了三元还有一个jmp。你的论点是错误的

三元

_ternary:                               ## @ternary
    .cfi_startproc
## BB#0:
    pushq   %rbp
Ltmp2:
    .cfi_def_cfa_offset 16
Ltmp3:
    .cfi_offset %rbp, -16
    movq    %rsp, %rbp
Ltmp4:
    .cfi_def_cfa_register %rbp
    subq    $16, %rsp
    movl    %edi, -4(%rbp)
    movl    %esi, -8(%rbp)
    movl    %edx, -12(%rbp)
    cmpl    $102, -4(%rbp)
    jne LBB0_2
## BB#1:
    cmpl    $111, -8(%rbp)
    je  LBB0_3
    jmp LBB0_4
LBB0_2:
    cmpl    $111, -12(%rbp)
    jne LBB0_4
LBB0_3:
    leaq    L_.str(%rip), %rdi
    callq   _puts
    movl    %eax, -16(%rbp)         ## 4-byte Spill
LBB0_4:
    movl    $0, %eax
    addq    $16, %rsp
    popq    %rbp
    ret
    .cfi_endproc
合乎逻辑

_logical:                               ## @logical
    .cfi_startproc
## BB#0:
    pushq   %rbp
Ltmp7:
    .cfi_def_cfa_offset 16
Ltmp8:
    .cfi_offset %rbp, -16
    movq    %rsp, %rbp
Ltmp9:
    .cfi_def_cfa_register %rbp
    subq    $16, %rsp
    movl    %edi, -4(%rbp)
    movl    %esi, -8(%rbp)
    movl    %edx, -12(%rbp)
    cmpl    $102, -4(%rbp)
    jne LBB1_2
## BB#1:
    cmpl    $111, -8(%rbp)
    je  LBB1_3
LBB1_2:
    cmpl    $111, -12(%rbp)
    jne LBB1_4
LBB1_3:
    leaq    L_.str1(%rip), %rdi
    callq   _puts
    movl    %eax, -16(%rbp)         ## 4-byte Spill
LBB1_4:
    movl    $0, %eax
    addq    $16, %rsp
    popq    %rbp
    ret
    .cfi_endproc
差异,不包括命名<=三元


陛下我想知道这是为什么——三元运算是在之后吗?与之前的条件无关?。我可以同意意料之外的假设,但我想知道是否有更糟糕的事情潜伏在那里。
20,22c20,21
<   jmp LBB0_4
---