什么时候可以在开关循环中省略"中断"?

eco*_*con 0 c++

我刚刚在learncpp上解决了第一次练习,第7.8章.我测试了他们的开关循环版本并且它可以工作,但我不知道它没有break,在这种情况下这样的代码不应该导致不良行为吗?我break什么时候可以遗漏?

这是我的版本(也正常工作):

switch (op)
    {
    case '+': {
        return add;
            break;}
    case '-': {
        return subtract;
        break;}
    case '*': {
        return multiply;
        break;}
    case '/': {
        return divide;
        break;}
    default: ;
    }
Run Code Online (Sandbox Code Playgroud)

Phy*_*aux 8

如果没有break,执行流程将继续下一个案例 - 除非你跳到其他方式(例如return,在你的情况下).这被称为堕落.

这是否是一个错误取决于程序.如果(例如)您希望多个cases具有相同的操作,则可能很有用:

switch (op)
{
    case '+':
        return add;
        break;  // these breaks do nothing - we have already returned!
    case '-':
        return subtract;
        break;
    case 'x':  // fall through to '*'
    case '*':
        return multiply;
        break;
    case '/':
        return divide;
        break;
}
Run Code Online (Sandbox Code Playgroud)


Bat*_*eba 5

请注意,C++ 不坚持使用break,但通常switch情况下取决于它们,以消除有用的后续功能。

break如果程序控制从未到达它,您可以删除它而不对您的程序产生任何影响:break语句之后的任何return语句都不可达,因此您可以安全地删除它们。

您也不需要空default标签。