当前位置: 首页 > news >正文

从C++0基础到C++入门(第十五节:switch语句)

一.  switch语句

1.1 语法结构如下:

switch (表达式) {case 常量1:// 代码块1break;case 常量2:// 代码块2break;default:// 默认代码块
}

1.2 注意 :

  • 表达式必须是整型或枚举类型(如intchar)。
  • case后的常量必须与表达式类型兼容。
  • 学会使用break
  • default为可选分支,当所有case不匹配时执行。

二. switch与if-else的对比

  • 适用场景

    • switch适合多分支且条件为离散值(如枚举、固定常量)。
    • if-else更适合范围判断或复杂逻辑(如x > 10 && y < 20)。
  • 性能差异

    • switch可能被优化为跳转表(效率高),而if-else需逐条判断。

2.1 注意事项

  1. 穿透问题
    省略break会导致代码继续执行后续case,需谨慎使用。例如:

    switch (x) {case 1: cout << "1"; // 无break,继续执行case 2case 2: cout << "2"; break; // 输出"12"
    }
    

  2. 变量作用域(稍微复杂的使用)
    case块内定义的变量需用花括号限定作用域,否则会报错:

    switch (x) {case 1: {int y = 10; // 正确:作用域限于当前casebreak;}
    }
    

  3. default分支
    即使没有匹配项,也建议添加default以处理意外情况,增强鲁棒性。


三. 具体案例练习:

3.1 判断星期几的输出:

int day = 3;
switch (day) {case 1: cout << "Monday"; break;case 2: cout << "Tuesday"; break;case 3: cout << "Wednesday"; break; // 输出"Wednesday"default: cout << "Invalid day";
}


3.2 常见错误

  • case中声明变量未加花括号。
  • 遗漏break导致意外穿透。
  • 使用浮点数或字符串作为switch表达式(不合法)。
http://www.lryc.cn/news/607920.html

相关文章:

  • 计算机网络:为什么IPv6没有选择使用点分十进制
  • 如何修复非json数据
  • Gemini CLI
  • 深入 Go 底层原理(五):内存分配机制
  • 操作系统-lecture5(线程)
  • Vue3核心语法基础
  • 【大模型入门】3.从头实现GPT模型以生成文本
  • 相对路径 绝对路径
  • UniappDay07
  • sqli-labs:Less-19关卡详细解析
  • Qt 槽函数被执行多次,并且使用Qt::UniqueConnection无效【已解决】
  • 24黑马SpringCloud的Docker本地目录挂载出现相关问题解决
  • Tushare对接OpenBB分析A股与港股市场
  • 解锁智能油脂润滑系统:加速度与温振传感器选型协同攻略
  • 深度学习核心:卷积神经网络 - 原理、实现及在医学影像领域的应用
  • 【Java】在一个前台界面中动态展示多个数据表的字段及数据
  • 定制开发开源AI智能名片S2B2C商城小程序的特点、应用与发展研究
  • 自进化智能体综述:通往人工超级智能之路
  • SpringBoot IOC
  • C++之vector类的代码及其逻辑详解 (中)
  • 【自动化运维神器Ansible】YAML语法详解:Ansible Playbook的基石
  • vue引入阿里巴巴矢量图库的方式
  • Kotlin协程极简教程:5分钟学完关键知识点
  • docker desktop入门(docker桌面版)(提示wsl版本太低解决办法)
  • 【MySQL】增删改查操作 —— CRUD
  • Elasticsearch 混合检索一句 `retriever.rrf`,把语义召回与关键词召回融合到极致
  • MySqL(加餐)
  • 在 AKS 中运行 Azure DevOps 私有代理-1
  • Cursor 与 VS Code 与 GitHub Copilot 的全面比较
  • 字节Seed发布扩散语言模型,推理速度达2146 tokens/s,比同规模自回归快5.4倍