控制不带中断的switch语句流

时间:2017-03-22 14:40:53

标签: c++ switch-statement

我对以下switch语句有疑问:

#include <iostream>
using namespace std;

int main()
{
    int x = 1;

    switch (x)
    {
        case 1:
            cout << "x is 1" << endl;
            //break;
        case 2:
            cout << "x is 2" << endl;
            //break;

        default:
            cout << "x is something else" << endl;
    }

}

使用break它会按预期工作,但当我注释掉断点时输出为:

  

x是1
  x是2
  x是别的东西

我希望输出为

  

x是1
  x是别的东西

因为x == 1并且执行了案例1。没有中断,它还会检查不应该执行的情况2,因为x!= 2.最后执行默认值。

为什么在这种情况下执行案例2?

1 个答案:

答案 0 :(得分:1)

case运营商的

switch个标签不会&#34;检查&#34;什么,他们基本上是goto标签。人们甚至可以写:

const int count = 12;
char dest[count], src[count] = "abracadabra", *from = src, *to = dest;
int n = 1 + (count - 1) / 8;
switch (count % 8) {
    case 0: do { *to++ = *from++;
    case 7:      *to++ = *from++;
    case 6:      *to++ = *from++;
    case 5:      *to++ = *from++;
    case 4:      *to++ = *from++;
    case 3:      *to++ = *from++;
    case 2:      *to++ = *from++;
    case 1:      *to++ = *from++;
               } while (--n > 0);
}
printf("%s\n", dest);