为什么这个结合赋值和相等检查的 if 语句返回 true?

新手上路,请多包涵

我一直在考虑一些初学者的错误,最后我发现了 if 语句中的错误。我将代码扩展为:

 int i = 0;
if (i = 1 && i == 0) {
    std::cout << i;
}

我已经看到 if 语句返回 true,它 couti as 1 如果在if语句中 i 被赋值为 1 ,为什么 i == 0 返回 true

原文由 TehMattGR 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 327
1 个回答

这与 运算符优先级 有关。

 if (i = 1 && i == 0)

不是

if ((i = 1) && (i == 0))

因为 &&== 的优先级高于 = 。它真正起作用的是

if (i = (1 && (i == 0)))

它将 1 && (i == 0) 的结果分配给 i 。 So, if i starts at 0 then i == 0 is true , so 1 && true is true (或 1 ),然后 i 设置为 1 。然后由于 1 为真,您输入 if 块并打印您分配给 i 的值。

原文由 NathanOliver 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题