以下是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;
}
100
然后打印下一个case 200
声明。此外,如果在第二种情况下使用除200
之外的任何值,它仍然会被执行。我知道在break
之后没有case 100
。但是为什么我不会得到编译时错误呢?case 70000:
但是为什么我不会得到编译时错误呢?
因为你没有做任何违法的事情。案例陈述只是一个带标签的陈述。评估开关中的表达式以确定要跳转到哪个标签(注意“jump”和“label”)然后该语句开始执行。说实话,这只是伪装的转换。它有点受限制,但仍然是一个跳跃。
唯一的约束,因为这是C ++,你可能不会跳过对象的初始化跳过它。
这个特征在Duff's Device中使用(尽管在C中)。
更清楚的是,为什么内部案例中的任何其他价值也会成功?
因为在执行跳转之后,这些标签无关紧要。他们只标记具体的陈述。跳转后,执行正常进行。正常执行不会因为标记而避免使用特定语句。
为什么你没有看到任何编译错误?这是因为你正确地使用了switch
表达式。但是,您可能无法按需查看结果。首先让我们尝试一个简单的switch
表达式:
switch(number1){
case 100:
cout<<"the number is 100"<<endl;
break;
case 200:
cout<<"the number is 200"<<endl;
break;
default:
cout<<"the number is neither 100 nor 200"<<endl;
break;
}
如果要使用其他数字,可以添加到switch-case
块。如果你不使用中断意味着下一个案例是目标。直到你不使用休息程序将继续。 default
说,如果不发生以上情况,我想做这部分。
我们来看看你的计划以及发生了什么:
switch(number1){
case 100:{//if the number is 100 it will start from here
cout << " outer switch number is: " << number1 << endl;
//it will break after the first break expresion
case 200:{ // any value other than 100// if the number is 200 it will start from here
cout << "inner switch number is: " << number2 << endl;
}
break; // I meant her is the first break
}
break;
}
switch
语句的作用类似于if
语句,但在处理超过2或3个选项时它更受欢迎。
switch
评估case
陈述中的条件。因此,每当它找到一个案例时,它认为它是一个条件,所以它继续执行,直到发现一个中断作为语句结束的标志。在你的情况下case 100
开始,但另一个案件在里面,所以只要100你没有休息,其后的一切都被执行。
case 100:
// do some stuff
case 0:
// do another stuff
case 5779:
// do ....
break;
如果只有case 100
成功,以上陈述将被执行。
记住在C ++中你可以写:
void foo(){
cout << "foo" << endl:
}
int main(){
b:
foo();
return 0;
}
它像label
,但只有关键字case
。你可以说一个case
内部案例没有它的switch
或先前的break
将工作与label
工作相同的方式。