switch-case语句没有中断

Los*_*st1 14 c++ switch-statement

根据这本书,我正在读:

问:如果我在switch-case语句中省略了中断,会发生什么?

断言语句使程序执行能够退出切换构造.没有它,执行继续评估以下case语句.

假设我的代码看起来像

switch (option}{
    case 1:
    do A;
    case 2:
    do B;
    default:
    do C;
    break;
}
Run Code Online (Sandbox Code Playgroud)

这是否意味着如果我选择案例1,A和C就完成了.如果我选择案例2,则完成B和C. 如果我不选择,那么只有C完成.

如果是这样,如果我们在做了C之后省略了休息会发生什么.

我认为这些是糟糕的编程习惯,但我很好奇会发生什么情况才能更深入地理解它是如何工作的.谢谢

Sho*_*hoe 22

从所选案例开始执行所有操作,直到您看到breakswitch语句结束.所以可能只有C被执行,或者B然后是C,或者A和B和C,但是从来没有A和C.


Kha*_*tri 10

  • 如果您在任何情况下都不包括中断,那么下面的所有情况都将被执行,直到它看到中断.

  • 如果你没有在默认值中包含break,那么它将不会产生任何影响,因为在这个'Default'情况下没有任何情况.

  • 并且不使用通常被视为不良做法的休息,但有时候它也可能因为它的落后性质而变得方便.例如:

    案例选项A:

    //optionA needs to do its own thing, and also B's thing.
    //Fall-through to optionB afterwards.
    //Its behaviour is a superset of B's.
    
    Run Code Online (Sandbox Code Playgroud)

    案例选项B:

    // optionB needs to do its own thing
    // Its behaviour is a subset of A's.
    break;
    
    Run Code Online (Sandbox Code Playgroud)

    案例选项C:

    // optionC is quite independent so it does its own thing.
    break;
    
    Run Code Online (Sandbox Code Playgroud)


小智 7

这些break行为就像一个goto命令。或者,作为一个更好的例子,就像returnvoid函数中使用一样。既然到了最后,那有没有就没有区别了。虽然,我确实喜欢包括它。

  • 如果接受的答案涵盖 OP 的所有方面,那就太好了。尤其要编辑指出,在第一种情况下,A、B和C都将被执行,而不仅仅是A和C。 (3认同)

Adh*_*mal 7

switch (option}{
    case 1:
    do A;
    case 2:
    do B;
    case 2:
    do C;
    break;  
    default:
    do C;
}
Run Code Online (Sandbox Code Playgroud)

如果你的选择是1它执行一切直到它找到break关键字...这意味着中断结束执行switch- > case 输出:A然后B然后C所以建议在每个案例之后放置休息如:

switch (option}{
        case 1:
        do A;
        break;
        case 2:
        do B;
        break;
        do C;
        break;        
        default:
        do D;
    }
Run Code Online (Sandbox Code Playgroud)

如果您的选项是1输出将是:只是A ...

注意:default不需要break;