比如这两种说法的区别:
if ( ucNum++ >= 3 ) // ucNum incremented after comparing its value to 3, correct?
{
ucNum = 0;
}
对比
ucNum++ >= 3 ? ucNum = 0 : 1; // does incrementing it happen somewhere in the middle of the inline?
也许它是特定于编译器的。它应该出现在条件表达式中的什么位置?
最佳答案
规则是先评估条件,然后再选择要评估的备选方案。由于评估的一部分是 ++
,因此增量将发生在赋值之前(如果赋值发生的话)。
正如@caf 评论的那样,在控制表达式之后有一个序列点。因此,虽然(正如 David Thornley 指出的那样)表达式求值的顺序可以由编译器重新排列(特别是副作用求值),但重新排列不能跨越序列点。
关于c - 有条件的? : expression, 后缀操作在什么时候发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8217275/