面试题答案
一键面试1. switch - case 语句工作原理
- 表达式类型限制:
switch
后的控制表达式必须是整型(包括char
类型)、枚举类型或std::integral_constant
。不能是float
、double
等浮点型或其他复杂类型。 - 工作流程:
switch
计算控制表达式的值,然后与各个case
常量表达式的值进行比较。如果找到匹配的case
,则执行该case
后的语句,直到遇到break
关键字或switch
语句结束。
2. break 关键字的作用
break
关键字用于跳出 switch - case
语句。当执行到 break
时,程序会立即终止 switch
语句的执行,跳出整个 switch
代码块,继续执行 switch
语句之后的代码。
3. 省略 break 的情况
如果省略 break
,程序会继续执行下一个 case
的语句,这种现象称为“穿透”(fall - through)。即从匹配的 case
开始,依次执行后续所有 case
的语句,直到遇到 break
或 switch
结束。这在某些特定场景下可能有用,但大多数情况下并非预期行为,可能导致逻辑错误。
4. 实际代码示例
#include <iostream>
int main() {
int day = 3;
switch (day) {
case 1:
std::cout << "Monday" << std::endl;
break;
case 2:
std::cout << "Tuesday" << std::endl;
break;
case 3:
std::cout << "Wednesday" << std::endl;
break;
case 4:
std::cout << "Thursday" << std::endl;
break;
case 5:
std::cout << "Friday" << std::endl;
break;
case 6:
std::cout << "Saturday" << std::endl;
break;
case 7:
std::cout << "Sunday" << std::endl;
break;
default:
std::cout << "Invalid day" << std::endl;
}
return 0;
}
在这个示例中,switch
根据 day
的值匹配相应的 case
,当 day
为 3 时,输出 "Wednesday",由于有 break
,不会继续执行后续 case
。
5. switch - case 比多个 if - else 更合适的情况
- 效率:对于整型或枚举类型的多条件判断,
switch - case
通常效率更高。switch - case
一般使用跳转表(jump table)实现,时间复杂度接近 O(1),而多个if - else
是顺序判断,时间复杂度为 O(n),特别是在条件较多时,switch - case
优势更明显。 - 代码可读性:
switch - case
结构清晰,条件一目了然,尤其是在条件值比较明确且离散时,代码逻辑比多个if - else
更易读。例如处理一周七天这样固定离散值的判断,switch - case
结构更直观。