更改案例内的开关变量

Dan*_*ani 9 c++ switch-statement

在以下代码中:

int i = 0;

switch(i)
{
    case 0:
        cout << "In 0" << endl;
        i = 1;
        break;
    case 1:
        cout << "In 1" << endl;
        break;
}
Run Code Online (Sandbox Code Playgroud)

会发生什么?它会调用未定义的行为吗?

Ben*_*igt 12

没有未定义的行为.但是i只有在代码到达时才会测试其值switch (i).所以case 1:将被跳过(通过break;声明).

switch关键字并不意味着"运行代码每当的值i是0/1".这意味着,检查现在i是什么,并根据它运行代码.它并不关心i将来会发生什么.

事实上,它有时很有用:

for( step = 0; !cancelled; ++step ) {
    switch (step)
    {
        case 0:
            //start processing;
            break;

        case 1:
            // more processing;
            break;

        case 19:
            // all done
            return;
    }
}
Run Code Online (Sandbox Code Playgroud)

case在构建有限状态机时,更改块内的控制变量是非常常见的(尽管不是必需的,因为您可以next_state在内部进行设置case,然后进行分配state = next_state).