在此代码中执行第一个表达式后,k 的值如何变为 -5?

how to did the value of k become -5 after implementation of 1st expression in this code?

谁能帮我理解这段代码。我无法理解 k 在执行语句 k=(j>=5)?(i<5)?(i-j-i):(k-j):(i);

后如何变成 -5
int main () {

    int i=8,j=5,k=0;
    k=(j>=5)?(i<5)?(i-j-i):(k-j):(i);
    i+=(k)?(i)?(k):(i):(k);
    cout<<i<<k;
    return 0;
}

输出:3 -5

将嵌套的三元表达式展开,并添加多余的括号可能更容易理解:

k = (j>=5) ? 
            ( (i<5) ?
                      (i-j-i)
                    : (k-j)
            )
           : (i);

现在j >= 5为真,表示i < 5求值,为假,给出k - j,即-5。


你可能永远不应该写这样的代码,如果除了读起来很烦之外没有其他原因的话。