c++ - 编译器如何编译if语句

标签 c++ c compiler-construction

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/

相关文章:

c++ - 对大量对进行排序

c++ - 什么是 C++17 中的 std::vector 推导指南?

c - C中malloc引起的内存泄漏

c - 使用 doxygen 的 ISR 文档

c - 针对特定场景最好的Linux内核锁定机制是什么

c - 在什么阶段抛出错误?

c++ - 什么是 "stack alignment"?

c++ - 关于 C++ 中的多重继承、虚拟基类和对象大小的问题

gcc - 有没有办法从我不使用的目标文件中删除所有函数?

c++ - 通过基类虚函数获取派生类型