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

09. 枚举

1.枚举简介

2.枚举基本用法

3.普通枚举的缺点

4.强类型枚举


1.枚举简介

枚举的核心是给一组整数常量起"有意义的名字",语法格式:// 语法:enum 枚举名 { 枚举常量1, 枚举常量2, ... };enumWeekday{Monday,// 默认值为0Tuesday,// 依次递增1,值为1Wednesday,// 值为2Thursday,// 值为3Friday,// 值为4Saturday,// 值为5Sunday// 值为6};
a.枚举常量默认从0开始,依次+1b.也可手动指定值(支持跳值,重复值)enumColor{Red=1,Green=3,Blue=5,Yellow=3// 允许重复值(但不推荐,易混淆)};

2.枚举基本用法

枚举常量属于"命名常量",使用时直接写名字,无需加前缀
#include <iostream>usingnamespacestd;enumSeason{Spring=1,Summer,Autumn,Winter};intmain(){// 1. 定义枚举变量Seasonnow=Summer;// 2. 输出枚举值(会隐式转换为整数)cout<<"Summer对应的数值:"<<now<<endl;// 输出2// 3. 条件判断if(now==Summer){cout<<"现在是夏天"<<endl;}// 4. 手动转换(枚举→整数、整数→枚举)Seasons=static_cast<Season>(3);// 整数转枚举(需显式转换)cout<<"值为3的枚举:"<<s<<endl;// 输出3(对应Autumn)return0;}

3.普通枚举的缺点

a.作用域污染:枚举常量会暴露在枚举所在的作用域中,比如两个枚举如果有同名常量enumA{Apple};enumB{Apple};// 编译错误!Apple重复定义
b.隐式类型转换:枚举常量会自动转换为整数Seasons=Spring;intnum=s;// 隐式转换为1(合法,但破坏类型安全)s=10;// 编译错误(整数不能隐式转枚举)c.底层类型不固定:编译器可自行选择int/short/long,跨平台可能不一致

4.强类型枚举

1).基本定义,语法上多了class(也可以用struct)// 语法:enum class 枚举名 : 底层类型 { 枚举常量1, ... };enumclassGender:char{// 指定底层类型为char(节省内存)Male='M',Female='F',Unknown='U'};-必须加class/struct-推荐显式指定底层类型(int/char/short),保证跨平台一致性-枚举常量默认值仍从0开始,可手动指定

2).核心用法 a.作用域隔离:枚举常量必须通过枚举名::常量名访问 b.无隐式类型转换:必须显示转换才能和整数交互#include <iostream>usingnamespacestd;// 强类型枚举示例enumclassWeekday:int{Monday=1,Tuesday,Wednesday};enumclassWorkday:int{Monday=10,// 和Weekday的Monday同名,但无冲突Tuesday};intmain(){// 1. 定义变量(必须加枚举名)Weekdayday=Weekday::Monday;// 2. 输出(必须显式转换为整数)cout<<"Monday的值:"<<static_cast<int>(day)<<endl;// 输出1// 3. 条件判断(必须用枚举名::常量名)if(day==Weekday::Monday){cout<<"今天是周一"<<endl;}// 4. 整数转枚举(仍需static_cast)Weekdayd=static_cast<Weekday>(2);cout<<"值为2的枚举:"<<static_cast<int>(d)<<endl;// 输出2(Tuesday)return0;}
http://www.jsqmd.com/news/294729/

相关文章:

  • 【C++】C++11 核心特性深度解析(二) - 实践
  • AI原生应用领域模型量化的安全考量
  • 一天一个开源项目(第1篇):everything-claude-code - 最全的 Claude Code 配置集合
  • 搭建终身学习系统时,AI应用架构师容易犯哪些错?(避坑指南)
  • 学霸同款2026 AI论文工具TOP9:专科生毕业论文写作全测评
  • 前端萌新别慌!30分钟搞懂CSS阴影:text-shadow和box-shadow实
  • AI编程实战 : 使用 TRAE CN 将 MasterGo 设计稿转化为前端代码
  • 实用指南:Linux Crontab命令详解:轻松设置周期性定时任务
  • 分析一下当前项目如果browser或者node包需要引用common包中的方法,如何设计项目架构
  • 导师推荐8个AI论文写作软件,继续教育学生轻松搞定毕业论文!
  • Firewalld 配置端口转发、SNAT、DNAT
  • 探索AI原生应用领域AI工作流的新趋势
  • AI智能体完全指南:无需编程基础,四步打造专属AI助手
  • 指针与数组:为什么数组名是特殊的指针?
  • 指针进阶:二级指针与指针的指针的应用场景
  • AI人工智能-RAG方法-第十四周(小白)
  • AI人工智能-Agent相关介绍-第十四周(小白)
  • AI人工智能-Function Call 与MCP-第十四周(小白)
  • 基于西门子PLC1214C的三原料自动称重配料搅拌系统程序修改探讨
  • AI原生应用中的多模态交互:从理论到实践
  • os安装-winoffice在线激活命令
  • C++ 贪心算法(Greedy Algorithm)详解:从思想到实战 - 指南
  • 仅 10MB 开源工具,一键远程唤醒关机电脑!
  • 马斯克又开源了。。。
  • 大数据领域中RabbitMQ的消息积压问题解决
  • 拒绝“疯狂截屏”:我用 Python 撸了一个自动化神器,把 200 分钟网课无损压榨成 PDF 笔记
  • 我用 Python 监听了自己的键盘,生成击键热力图,看看每天到底在“摸鱼”还是“搬砖”?
  • 导师推荐9个AI论文软件,MBA毕业论文轻松搞定!
  • 若依多租户版 - 请求接口 clientId 与 Token 不匹配
  • 若依多租户版 - @ApiEncrypt, api接口加密