分支穿透

10 分钟

switch 里每个 case 末尾如果忘了 break,程序不会自动停下,而是"穿透"到下一个 case 继续执行,直到遇到 breakswitch 结束。这是从 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 都带 breakx==1 只会输出 1。坑:读程序时逐个 case 检查有没有 break,漏一个输出就多一串。有时会故意利用穿透让多个 case 共用代码,如 case 'a': case 'A': 一起处理大小写,那是有意为之,别当成 bug。习惯上给每个 case(包括 default)都写清 break,能省掉很多莫名其妙的错误。

小纸条

忘写跳出会发生什么?

登录 后可看答案

分支穿透 · 考级冲刺 · op599 课程