为了账号安全,请及时绑定邮箱和手机立即绑定

Switch Statement Fallthrough…应该允许吗?

Switch Statement Fallthrough…应该允许吗?

C++
婷婷同学_ 2019-11-28 09:46:19
只要我记得,我就避免使用switch语句失败。实际上,我不记得它曾经作为一种可能的方式进入我的意识,因为它很早就被钻入我的脑海,因为它只不过是switch语句中的一个错误。但是,今天我遇到了一些设计上使用它的代码,这使我立即想知道社区中的每个人对switch语句失败的看法。是某种编程语言应该明确不允许的(就像C#一样,尽管它提供了一种解决方法),或者它是任何一种功能强大到足以让程序员掌握的语言的功能?编辑: 我对失败的含义还不够具体。我经常使用这种类型:    switch(m_loadAnimSubCt){        case 0:         case 1:             // Do something            break;        case 2:        case 3:        case 4:            // Do something            break;   }但是,我担心这样的事情。   switch(m_loadAnimSubCt){        case 0:         case 1:             // Do something but fall through to the other cases             // after doing it.        case 2:        case 3:        case 4:            // Do something else.            break;   }这样,只要大小写为0、1,它将在switch语句中执行所有操作。我已经设计地看到了这一点,但我不知道是否同意应该以这种方式使用switch语句。我认为第一个代码示例非常有用且安全。第二个似乎有点危险。编码样式的 开关语句
查看完整描述

3 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

这可能取决于您认为的失败之处。我对这种事情还可以:


switch (value)

{

  case 0:

    result = ZERO_DIGIT;

    break;


  case 1:

  case 3:

  case 5:

  case 7:

  case 9:

     result = ODD_DIGIT;

     break;


  case 2:

  case 4:

  case 6:

  case 8:

     result = EVEN_DIGIT;

     break;

}

但是,如果您有一个case标签,后跟代码进入另一个case标签,那么我几乎总是认为这很邪恶。也许将通用代码移至函数并从两个地方调用将是一个更好的主意。


并且请注意,我使用“邪恶”的C ++常见问题解答定义


查看完整回答
反对 回复 2019-11-28
?
FFIVE

TA贡献1797条经验 获得超6个赞

这是一把两刃剑。有时非常有用,经常很危险。


什么时候好?当您想要10个案件时,所有案件的处理方式都相同...


switch (c) {

  case 1:

  case 2:

            ... do some of the work ...

            /* FALLTHROUGH */

  case 17:

            ... do something ...

            break;

  case 5:

  case 43:

            ... do something else ...

            break;

}

我喜欢的一条规则是,如果您想做任何想排除中断的事情,则需要明确注释/ * FALLTHROUGH * /以表明您的意图。


查看完整回答
反对 回复 2019-11-28
?
炎炎设计

TA贡献1808条经验 获得超4个赞

失败确实是一件方便的事,具体取决于您在做什么。考虑以下简洁明了的方式来安排选项:


switch ($someoption) {

  case 'a':

  case 'b':

  case 'c':

    // do something

    break;

  case 'd':

  case 'e':

    // do something else

    break;

}

想象一下使用if / else这样做。真是一团糟。


分享编辑


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 1113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信