【发布时间】:2017-08-10 02:02:58
【问题描述】:
在下面的代码中,我期待回答“是”。但答案是否定的。这意味着 i 在 && 操作后递增。我期待一旦 if() 中的整个表达式被评估, i 就会增加。那么帖子增量的相关规则是什么?
int main()
{
int i = 1;
if (i++ && (i == 1))
printf("Yes\n");
else
printf("No\n");
}
【问题讨论】:
-
对于
&&,首先对左侧进行全面评估,其中包括递增i。你应该问的不是++,而是&&。 -
是所有逻辑运算符都这样还是只有少数?
-
&&和||就是这种情况,因为它们的short-circuiting behavior。这两个运算符将始终首先完全评估左侧参数。根据该评估的结果,可能(或可能不)继续并评估右手参数。 -
这也称为
sequence point。如果在本例中的子表达式之间存在序列点,则第一个子表达式的值计算和副作用,即i++,在第二个子表达式的每个值计算和副作用之前都被排序。 -
以下是您需要了解的有关 ++ 工作原理的所有信息:不要。永远不要使用它,它永远不会咬你。在
i += 1上保存几次击键是不值得的。