As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center提供指导。




已关闭8年。




只要我记得我就避免使用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语句。我认为第一个代码示例非常有用且安全。第二个似乎有点危险。

最佳答案

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

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++ FAQ"evil"定义

关于coding-style - Switch语句掉线…应该允许吗? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/188461/

10-12 00:28