我今天遇到了一个代码转换代码,看到它是如何工作的,有点惊讶.代码是:
switch (blah)
{
case a:
break;
case b:
break;
case c:
case d:
case e:
{
/* code here */
}
break;
default :
return;
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,在变量所在的场景中c,路径进入了"此处代码"段.我同意c在案件开关部分的末端没有中断,但我会想象它会通过default.当你降落在一条case blah:线上时,它不会检查你当前的值是否与特定情况相匹配,然后只让你进入特定的区段?否则案件有什么意义?
Mer*_*ham 15
这称为案例落实,是一种理想的行为.它允许您在案例之间共享代码.
如何使用案例直通行为的示例:
switch(blah)
{
case a:
function1();
case b:
function2();
case c:
function3();
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
如果进入交换机时blah == a,那么你将执行function1(),function2()和function3().
如果您不希望出现此行为,可以通过包含break语句来选择退出.
switch(blah)
{
case a:
function1();
break;
case b:
function2();
break;
case c:
function3();
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
switch语句的工作方式是它(或多或少)执行a goto来跳转到case标签,并从那一点继续运行.当执行命中时break,它会离开开关块.
she*_*les 10
这是正确的行为,它被称为"堕落".这使您可以使用相同的代码处理多个案例.在高级情况下,您可能希望在一种情况下执行某些代码,然后再转到另一种情况.
举例:
switch(command)
{
case CMD_SAVEAS:
{
this->PromptForFilename();
} // DO NOT BREAK, we still want to save
case CMD_SAVE:
{
this->Save();
} break;
case CMD_CLOSE:
{
this->Close();
} break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)