分支穿透
约 10 分钟
switch 里每个 case 末尾如果忘了 break,程序不会自动停下,而是"穿透"到下一个 case 继续执行,直到遇到 break 或 switch 结束。这是从 C 继承来的经典考点,读程序题最爱在这里埋坑。
int x = 1;
switch (x) {
case 1: cout << "1"; // 没有 break!
case 2: cout << "2"; // 穿透到这里继续
case 3: cout << "3"; break; // 到这里才停
default: cout << "D";
}
// 输出 123,而不是只有 1
如果每个 case 都带 break,x==1 只会输出 1。坑:读程序时逐个 case 检查有没有 break,漏一个输出就多一串。有时会故意利用穿透让多个 case 共用代码,如 case 'a': case 'A': 一起处理大小写,那是有意为之,别当成 bug。习惯上给每个 case(包括 default)都写清 break,能省掉很多莫名其妙的错误。
小纸条
忘写跳出会发生什么?
登录 后可看答案