main()
{
int k = 5;
if(++k <5 && k++/5 || ++k<=8); // how to compiler compile this statement
print f("%d",k);
}
//这里答案是 7 但为什么呢?
最佳答案
++k < 5
计算结果为 false (6 < 5 = false),因此 &&
的 RHS不评估运算符(因为已知结果为假)。 ++k <= 8
然后求值 (7 <= 8 = true),因此完整表达式的结果为 true,并且 k
已增加两次,使其最终值为 7。
请注意&&
和||
是short circuit bool 运算符 - 如果表达式的结果可以由左侧参数确定,则不会评估右侧参数。
另请注意,与大多数运算符不同,短路运算符定义 sequence points在表达式中,这使得在上面的示例中修改 k
是合法的在同一表达式中多次出现(一般来说,如果没有插入序列点,则不允许这样做,并且会导致 Undefined Behaviour )。
关于c++ - 编译器如何编译if语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18300486/