笔试被default摆了一道QAQ,之前都是用常规用法,不太清楚default不同位置会有什么影响
先说结论:default可以看作是一种case,即不在列出范围内的case。
case穿透
首先我们要知道,switch 语句中有一个穿透机制,如果任何一个case没有写break,他会从匹配的case向下执行所有case(即使条件不匹配) 知道遇到break;
void func(int n) {
switch (n) {
case 1:
n++;
cout << "1:" << n << endl;
case 0:
n++;
cout << "0:" << n << endl;
case 9:
n++;
cout << "9:" << n << endl;
default:
cout << "default" << endl;
break;
}
}
func(0);//看出从进入case后如果没有break 会一直贯穿不符合9也继续
func(1); //default也一样会被贯穿
可以看出对于func(0)执行后,即使不满足case 9的条件也会执行。
default = case
无论default放哪(虽然默认放最后,我的理解是利于代码的可读性)都和case一样,就像写代码时不会刻意的注意case条件的顺序(当然按照顺序更好)
void func1(int n) {
switch (n) {
case 1:
n++;
cout << "1:" << n << endl;
default:
cout << "default" << endl;
case 0:
n++;
cout << "0:" << n << endl;
case 9:
n++;
cout << "9:" << n << endl;
}
}
func1(8);//default只是一种默认的除去已有case的case,和其他case一致
其实default也类似一个case,写在哪不重要,和case一样会发生穿透,可以利用break阻止或者合理的利用穿透。
欢迎指正AvA ~