掌握 C++ switch-case 语句:语法、流程与计算器实战案例
C++ switch-case 语句完全指南
全面解析 C++ switch-case 语句:语法结构、执行流程、break 防穿透、default 兜底,附简易计算器实战案例。
switch 语句是一种简洁的控制流工具:根据表达式值从多个分支中选择唯一执行块。
语法:
switch (expression) {
case constant1:
// expression == constant1 时执行
break;
case constant2:
// expression == constant2 时执行
break;
...
default:
// 无匹配时执行
}
工作原理:
expression计算一次,与每个case常量比较- 匹配成功 → 执行该 case 后代码,直到遇到
break - 无匹配 → 执行
default块
if...else if 链可达成相同效果,但 switch 语法更清晰、易读,且编译器常优化为跳转表(O(1) 分支)。switch 流程图

实战案例:简易计算器
#include <iostream>
using namespace std;
int main() {
char oper;
float num1, num2;
cout << "Enter an operator (+, -, *, /): ";
cin >> oper;
cout << "Enter two numbers: " << endl;
cin >> num1 >> num2;
switch (oper) {
case '+':
cout << num1 << " + " << num2 << " = " << num1 + num2;
break;
case '-':
cout << num1 << " - " << num2 << " = " << num1 - num2;
break;
case '*':
cout << num1 << " * " << num2 << " = " << num1 * num2;
break;
case '/':
cout << num1 << " / " << num2 << " = " << num1 / num2;
break;
default:
cout << "Error! The operator is not correct";
break;
}
return 0;
}
输出示例
Enter an operator (+, -, *, /): + Enter two numbers: 2.3 4.5 2.3 + 4.5 = 6.8
Enter an operator (+, -, *, /): ? Enter two numbers: 2.3 4.5 Error! The operator is not correct
程序工作流程解析
- 提示输入运算符,存入
char oper - 提示输入两个数值,存入
float num1、num2 switch评估oper:+→ 加法-→ 减法*→ 乘法/→ 除法- 其他 →
default报错
break 终止 switch 块。省略 break 会导致“穿透”,意外执行后续 case。
switch 进阶特性与最佳实践
1. case 标签要求
- 必须是整型常量表达式(
int、char、enum、constexpr) - 不能是变量、浮点数、字符串(C++17 起
std::string_view仍不支持) - 同一
switch内case值必须唯一
2. 多标签共享代码块
switch (ch) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
cout << "Vowel";
break;
default:
cout << "Consonant";
}
3. C++17 init-statement 语法
switch (auto status = GetStatus(); status) {
case Status::Ok: /* ... */ break;
case Status::Error: /* ... */ break;
}
变量 status 仅在 switch 作用域内可见,避免污染外部作用域。
4. [[fallthrough]] 属性(C++17)
故意穿透时显式标注,消除编译器警告:
switch (level) {
case 3: // Critical
LogCritical();
[[fallthrough]];
case 2: // Error
LogError();
[[fallthrough]];
case 1: // Warning
LogWarning();
break;
case 0: // Info
LogInfo();
break;
}
5. 枚举类 switch 的完整性检查
对 enum class 使用 switch 时,若漏写 case,启用 -Wswitch-enum(GCC/Clang)或 /W4(MSVC)可获警告。配合无 default 可强制处理所有枚举值。
switch vs if-else 链:性能与可读性权衡
| 维度 | switch | if-else 链 |
|---|---|---|
| 可读性 | 离散常量分支极高 | 区间/复合条件更灵活 |
| 性能 | 常优化为跳转表 O(1) | 顺序求值 O(n) |
| 条件类型 | 仅整型常量 | 任意布尔表达式 |
| 范围判断 | 不支持 | 原生支持 |
| 字符串匹配 | 不支持 | 支持 |
经验法则:整型/枚举离散值分支 ≥ 3 个用 switch;区间、复合条件、字符串用 if-else。
C语言
- 掌握 C# switch 语句:语法、示例与最佳实践
- C# break 语句:用法、时机与实战示例
- 掌握 C# continue 语句:高效跳过循环迭代的实战指南
- 深入理解 C++ 类型转换:隐式、显式转型与现代 Cast 算符
- 掌握 C++ 运算符:六大类型全解析与实战示例
- C++ 注释最佳实践:编写可读、可维护代码的注释艺术
- 掌握 C++ 条件语句:if、if-else、嵌套 if 与多重分支全解析
- 掌握 C++ break 语句:跳出循环与 switch 的核心控制流
- 掌握 C++ continue 语句:跳过当前迭代的循环控制艺术
- 掌握 C++ 函数:从基础到进阶的完整实战指南
- 掌握 C++ 数组:声明、初始化、访问与实战操作全指南
- 掌握 C++ switch-case:语法、用法与实战示例