0

0

c++中switch语句怎么用_c++ switch case语法详解【入门】

裘德小鎮的故事

裘德小鎮的故事

发布时间:2026-02-04 15:37:33

|

145人浏览过

|

来源于php中文网

原创

switch仅支持整型、枚举及可隐式转为整型的类型,不支持string、浮点或自定义类;case后须为编译期常量,缺break将fall-through,default处理未匹配情况。

c++中switch语句怎么用_c++ switch case语法详解【入门】

直接说结论:switch 在 C++ 中只能用于整型、枚举或可隐式转换为整型的类型(如 charshortintlong longenum),不能用于 std::stringfloatdouble 或自定义类。

switch 的基本结构和必须写的 break

switch 后面跟一个表达式,每个 case 后跟一个常量值(编译期可确定),最后用 default 处理未匹配情况。关键点是:不写 break 会“穿透”(fall-through)到下一个 case,这是常见 bug 来源。

示例:

int x = 2;
switch (x) {
    case 1:
        std::cout << "one";
        break;  // 必须显式加,否则继续执行 case 2
    case 2:
        std::cout << "two";
        break;  // 没有这行,程序会接着跑 case 3
    case 3:
        std::cout << "three";
        break;
    default:
        std::cout << "other";
}
  • case 值必须是常量表达式,不能是变量或函数调用(如 case i:case func(): 都非法)
  • default 不强制写,但强烈建议加上,避免逻辑遗漏
  • 多个 case 可共享一段代码,只要不写 break —— 这是合法用法,不是 bug(比如 case 'a': case 'A':

为什么不能用 string 或 float 写 case

C++ 的 switch 底层依赖跳转表(jump table)或二分查找优化,要求 case 值在编译期完全确定且可排序/散列。而 std::string 是运行时对象,float 存在精度问题,都不满足条件。

立即学习C++免费学习笔记(深入)”;

错误写法:

智谱AI开放平台
智谱AI开放平台

智谱AI大模型开放平台-新一代国产自主通用AI开放平台

下载
std::string s = "hello";
switch (s) {  // 编译错误:no matching function for switch
    case "hello": ...  // 字符串字面量也不是整型常量
}
  • 想按字符串分支?用 if-elsestd::map/std::unordered_map 查表
  • 想用浮点数判断相等?别用 switch,改用 if (abs(x - 3.14) 类方式
  • C++17 起支持 constexpr 字符串哈希(如 std::string_view + 自定义哈希 constexpr 函数),但标准 switch 仍不接受,需手动转成整型 ID

case 标签的作用域和变量定义限制

每个 case 不构成独立作用域,所以不能直接在 case 下定义并初始化变量(除非用花括号包起来)。

错误写法:

switch (x) {
    case 1:
        int y = 10;  // 编译错误:跳过初始化
        std::cout << y;
        break;
    case 2:
        std::cout << "two";
}

正确写法:

switch (x) {
    case 1: {
        int y = 10;  // 加花括号创建局部作用域
        std::cout << y;
        break;
    }
    case 2:
        std::cout << "two";
        break;
}
  • 没加花括号时,case 标签只是跳转目标,不是作用域边界
  • 如果变量只需声明不初始化(如 int y;),可以不加括号,但初始化必须包作用域
  • 现代编译器(如 GCC/Clang)通常会报 error: jump to label crosses initialization

真正容易被忽略的是:switch 对编译器优化很敏感,case 数量少且密集(如 1~5)可能生成跳转表,稀疏或跨度大(如 1, 100, 10000)则退化为 if-else 链——别默认它一定比 if-else 快。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

564

2023.08.02

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

580

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

103

2025.10.23

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1506

2023.10.24

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

791

2023.08.22

switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

544

2023.09.21

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

425

2024.03.13

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

288

2023.10.18

抖音网页版入口与视频观看指南 抖音官网视频在线访问
抖音网页版入口与视频观看指南 抖音官网视频在线访问

本专题汇总了抖音网页版的入口链接、官方登录页面以及视频观看入口,帮助用户快速访问抖音网页版,提供免登录访问方式和直接进入视频播放页面的方法,确保顺利浏览和观看抖音视频。

22

2026.02.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 8.5万人学习

C 教程
C 教程

共75课时 | 4.5万人学习

C++教程
C++教程

共115课时 | 15.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号