在下面的代码中:
int i = 0;
switch(i)
{
case 0:
cout << "In 0" << endl;
i = 1;
break;
case 1:
cout << "In 1" << endl;
break;
}
会发生什么?它会调用未定义的行为吗?
最佳答案
没有未定义的行为。但是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;
}
}
在构建有限状态机时,更改 case
block 中的控制变量非常常见(尽管不是必需的,因为您可以在 中设置
,然后做赋值next_state
casestate = next_state
)。
关于c++ - 在案例中更改开关变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8333701/