y += (x-- ? z++ : --z); 所以这是你的问题,答案很简单................
我们知道像 X-- 或 x++ 这样的东西被称为后缀递增或递减。根据后缀递增或递减的规则,表达式将首先进行评估,然后才会执行递增或递减操作。即先评估再增加或减少.....
现在让我们解决你的问题:
Y+=X--?Z++:--Z....现在它包含三个部分,即左,中和右...现在需要考虑的是:“如果左侧部分为真,则它将返回中间部分,否则为右侧部分...并且执行始终从左侧部分开始,因为它是条件部分”
现在简化一下语句:Y+=X?Z:Z;....现在看看左侧部分是否有前缀或后缀递增或递减.....如果有 post ++/--,则先评估简化的语句......然后再去执行 ++/--.....
现在左侧部分具有后缀递减...所以先评估表达式...即
y+=1:3:3 //任何条件部分中的非零值都是 true(即 1)
现在我们的条件为真,它将返回中间部分,当控制流到达中间部分时,只有x值会递减,即变为0...
现在第二个简化语句是Y+=Z。(由于条件为真并且我们得到了中间部分,编译器将跳过右侧部分。)
现在观察Z是否为后++ / --(或)前++ / --...哈哈..它是后增量..所以先评估简化语句2,然后增加Z的值....即
Y+=Z =>Y=Y+Z
=>Y=2+3 =>y=5
现在表达式已经被计算,即Y=5,所以现在增加Z的值,即它变成4