赋值与相等
约 10 分钟
一个等号 = 是赋值:把右边的值放进左边变量,整个表达式的值就是这个数。两个等号 == 才是比较,返回真或假。if (x = 0) 会先把 0 赋给 x,表达式值为 0(即假),永远不进 if;if (x = 5) 表达式值为 5(非零即真),永远进 if。只有 if (x == 0) 才是"判断 x 是否等于 0"。
int x = 3;
if (x = 0) cout << "A"; // 不会打印:x 被改成 0,条件为假
cout << x << "\n"; // x 已经变成 0 了!
int y = 3;
if (y == 0) cout << "B"; // 这才是正确的相等判断
坑:写错通常不报错,只是逻辑全乱,还顺手改掉了变量的值,非常难查。防错技巧一:把常量写在左边,if (0 == x),万一手滑写成 0 = x,编译器会直接报错。技巧二:打开编译警告 -Wall,它会提示 "suggest parentheses around assignment used as truth value"。看到 if 条件里只有一个 =,先怀疑是不是漏了一个。
小纸条
if(x=0) 和 if(x==0) 有什么不同?
登录 后可看答案