为何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
相关产品推荐
相关产品推荐

