Ale*_*x24 9 c++ switch-statement
这是一个switch声明的例子.我不知道它为什么这样工作:
int main(){
int number1 = 100, number2 = 200;
switch(number1){
case 100:{
cout << " outer switch number is: " << number1 << endl;
case 200:{ // any value other than 100
cout << "inner switch number is: " << number2 << endl;
}
break;
}
break;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的程序打印:100然后打印下一个语句case 200.此外,如果200在第二种情况下使用的值以外的任何值,它仍然会被执行.我知道break之后没有了case 100.但是为什么我不会得到编译时错误呢?
为了更清楚,为什么内部案例中的任何其他价值也会成功?例如,
case 70000:
Run Code Online (Sandbox Code Playgroud)但是为什么我不会得到编译时错误呢?
因为你没有做任何违法的事情.案例陈述只是一个带标签的陈述.评估开关中的表达式以确定要跳转到哪个标签(注意"jump"和"label")然后该语句开始执行.说实话,这只是伪装的转换.它有点受限制,但仍然是一个跳跃.
唯一的约束,因为这是C++,你可能不会跳过对象的初始化跳过它.
这个功能在Duff的设备中很常用(尽管在C中).
更清楚的是,为什么内部案例中的任何其他价值也会成功?
因为在执行跳转之后,这些标签无关紧要.他们只标记具体的陈述.跳转后,执行正常进行.正常执行不会因为标记而避免使用特定语句.
| 归档时间: |
|
| 查看次数: |
609 次 |
| 最近记录: |