You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何if语句中==可正常工作,而=却无法正常运行?

为什么if语句里用=不会按预期工作?

先看你这段代码:

for (unsigned int i = 0; i < list.size(); i++) {
    if (list.at(i) = n) {
        cout << "True";
        return 0;
    }
}

首先得明确:C++里if判断的是表达式的布尔值,而=是赋值操作,它本身是个表达式——执行赋值后,这个表达式的结果就是被赋的值(也就是n)。

所以这段代码实际干的事是:

  • 先把n塞给list.at(i),直接修改了列表里的元素
  • 接着判断这个赋值后的结果(也就是n)是不是非零:
    • 如果n不是0,不管原本list.at(i)和n相不相等,都会直接输出"True"并退出程序
    • 如果n是0,赋值后结果为0,布尔值是false,就不会进入if块

这和你原本想“判断列表元素是否等于n”的逻辑完全不是一回事,不是说这个写法“无效”,而是逻辑彻底跑偏了。

另外提一句,不少编译器会给这种在if里用赋值的情况发警告,比如GCC开-Wparentheses选项时,会提醒你是不是把==写错成=了。

核心区别再强调下:

  • =是赋值,会改变量,表达式结果是被赋的值
  • ==是相等判断,不碰变量值,表达式结果是true或false

内容的提问来源于stack exchange,提问作者sauce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:01:09