赋值与相等

10 分钟

一个等号 =赋值:把右边的值放进左边变量,整个表达式的值就是这个数。两个等号 == 才是比较,返回真或假。if (x = 0) 会先把 0 赋给 x,表达式值为 0(即假),永远不进 ifif (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) 有什么不同?

登录 后可看答案

赋值与相等 · 考级冲刺 · op599 课程