例如,这两个语句之间的区别:
if ( ucNum++ >= 3 ) // ucNum incremented after comparing its value to 3, correct?
{
ucNum = 0;
}
VS
ucNum++ >= 3 ? ucNum = 0 : 1; // does incrementing it happen somewhere in the middle of the inline?
也许它是特定于编译器的。它应该在条件表达式中出现在哪里?
最佳答案
规则是在选择要评估的备选方案之前先评估条件。由于评估的一部分是++
,因此增量将发生在赋值之前(如果赋值发生的话)。
正如@caf所说,控制表达式后面有一个序列点。因此,虽然(正如david thornley指出的那样)表达式求值的顺序可以由编译器重新排列(特别是副作用求值),但重新排列不能跨序列点。