问题描述
int flag = 0;
char a = 'b';
switch(a) {
case 'a':
cout << "In a";
break;
if(flag!=0) {
case 'b':
cout << "In b";
break;
}
case 'c':
cout << "In c";
break;
default:
cout << "In d";
}
有人可以解释为什么上面的代码打印“ In b”吗? 据我了解,它应该打印“ In d”
解决方法
因为case 'a':
实际上是标签,控制流在switch (a)
上被重定向到该标签。除了不能修改编译时结构外,if语句不能仅仅由于上述语义而导致事前无法到达而阻止这种重定向。
switch case
机制类似于goto
,如果您查看汇编代码here,则将其跳转到相关的case
,您会发现它转换为CMP, jmp或je命令