Yet Another Conditional Operator Nesting Question

前端 未结 2 1162
[愿得一人]
[愿得一人] 2021-01-05 16:48

As per C precedence tables, the ternary conditional operator has right-to-left associativity.

So, is it directly convertible to the equivalent if-else ladder?

相关标签:
2条回答
  • 2021-01-05 17:32

    Your assumption is correct; however, it is often wise to add in parentheses for readability, e.g.:

    x ? ( y ? z : u ) : v
    
    0 讨论(0)
  • 2021-01-05 17:41

    The example you gave could only be interpreted in one way (like the if statements you gave), whether the ternary operator had right-to-left or left-to-right associativity.

    Where the right-to-left associativity matters is when you have:

    x = a ? b : c ? d : e;
    

    Which is interpreted as: x = a ? b : (c ? d : e), not as x = (a ? b : c) ? d : e.

    To give a more realistic example:

    int getSign(int x) {
        return x < 0 ? -1 :
               x > 0 ?  1 :
                        0;
    }
    

    This is identical to the (probably more readable) if / else-if statements:

    int getSign(int x) {
        if (x < 0)
             return -1;
        else if (x > 0)
             return 1;
        else return 0;
    }
    
    0 讨论(0)
提交回复
热议问题