新闻详情

新闻详情

首页 / 资讯中心 / 详情

C++ enum class:让状态更清楚,别把整数转换当成验证

发布时间:2026/9/28 21:03:58来源:尧图网络
C++ enum class:让状态更清楚,别把整数转换当成验证
C enum class让状态更清楚别把整数转换当成验证用 0、1、2 表示连接状态很方便但调用者很难记住每个数字的含义。枚举可以命名这些状态enum class 还通过作用域与更严格的转换规则减少误用。最低标准C17。示例展示定义、switch 和外部整数校验。1. 先校验再产生可信状态#includecstdint#includeiostream#includeoptionalenumclassState:std::uint8_t{idle0,running1,stopped2};std::optionalStateparse_state(intvalue){switch(value){case0:returnState::idle;case1:returnState::running;case2:returnState::stopped;default:returnstd::nullopt;}}constchar*name(State state){switch(state){caseState::idle:returnidle;caseState::running:returnrunning;caseState::stopped:returnstopped;}returnunknown;}intmain(){for(intraw:{1,9}){autostateparse_state(raw);std::cout(state?name(*state):invalid)\n;}std::coutstatic_castint(State::stopped)\n;}输出是 running、invalid、2。parse_state 在边界处完成校验后续业务代码就不必反复猜测某个整数是什么意思。2. 作用域和转换规则解决不同问题使用时写 State::running枚举成员不会直接污染外层名字空间。enum class 也不会自动转成整数因此不会轻易和无关数字混算。需要输出底层数值时可以显式转换。示例转成 int而不是直接输出 uint8_t因为很多实现的 uint8_t 是 unsigned char输出流可能按字符处理。3. static_cast 并不会检查枚举成员对具有固定底层类型的枚举转换整数可以产生没有对应命名成员的值。比如转换得到 9并不意味着程序已经确认它是合法的业务状态。外部配置、网络字段、文件内容都应使用明确的解析或校验函数。示例 name 在 switch 后仍有 unknown 兜底避免在遇到非命名值时没有返回。新增状态时编译器告警也能帮助发现遗漏分支但告警能力取决于编译选项不能替代测试。4. 固定底层类型不等于定义好了通信协议指定 uint8_t 可以明确需要的表示类型但一个真正的协议还需要说明字段值、保留值、版本兼容和序列化方式。多字节数据还涉及字节序不能直接把任意对象的内存布局当成长期格式。状态枚举也不同于位标志集合。若需要组合多个选项应显式设计按位运算和合法组合不要为了方便到处强转整数。小结enum class 让内部表达更可靠边界数据是否合法仍需要程序自己负责。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Altium Designer元件库中英文对照表:从电阻电容到二极管选型避坑指南 2026/9/28 22:47:48

Altium Designer元件库中英文对照表:从电阻电容到二极管选型避坑指南

1. 为什么一张对照表能决定原理图返工率刚入行那会儿,我最怕的不是画PCB,而是打开Altium Designer的元件库面板,面对满屏的英文缩写发愣。RES、CAP、IND、DIODE、TVS、MOSFET——这些词单独看都认识,可一旦混在几百个库文件里&…

阅读更多 →
CANoe处理ASC/BLF文件时最常见的三个配置错误及避坑指南 2026/9/28 22:47:41

CANoe处理ASC/BLF文件时最常见的三个配置错误及避坑指南

1. 为什么ASC/BLF文件处理总在关键时刻掉链子搞车载总线测试的兄弟对CANoe肯定不陌生,Vector这套工具链在总线仿真、诊断、标定这些环节基本是绕不开的存在。日常干活的时候,我们经常需要把路试采集的数据、台架跑出来的日志、供应商发过来的报文记录&am…

阅读更多 →
ST25DV NFC天线阻抗匹配与量产级设计方法 2026/9/28 22:47:07

ST25DV NFC天线阻抗匹配与量产级设计方法

1. 这不是“画个线圈就完事”的NFC天线设计,而是用ST25DV芯片在PCB上构建可量产、可复现、可调试的射频前端系统你手头有一颗ST25DV系列动态NFC标签芯片——它不是普通RFID芯片,而是集成了IC接口、EEPROM、能量采集和双向通信能力的智能标签核心。你想把…

阅读更多 →
ST25DV NFC天线参数化设计:KiCad+Python实现精准匹配 2026/9/28 22:47:07

ST25DV NFC天线参数化设计:KiCad+Python实现精准匹配

1. 项目概述:为什么一个NFC标签天线设计值得花三小时写清楚我去年帮一家智能仓储设备厂商做RFID/NFC兼容升级,客户提了个看似简单的需求:“在现有PCB上加个NFC标签,能被手机和工业读卡器稳定识别,尺寸不能超1212mm&…

阅读更多 →
HDMI转MIPI DSI桥接芯片MS1861全流程实战:从选型到点亮调试 2026/9/28 22:47:00

HDMI转MIPI DSI桥接芯片MS1861全流程实战:从选型到点亮调试

MS1861这颗芯片在显示方案圈子里其实不算新面孔,但真正把它用稳、用透的人并不多。我最近刚完成一个把HDMI信号转成MIPI DSI去驱动一块7寸1280x800 IPS屏的项目,从选型、原理图设计、PCB Layout到点亮调试,前后踩了不少坑。这篇文章就把整个过…

阅读更多 →
eip55在鸿蒙上的Flutter适配实践 2026/9/28 22:46:53

eip55在鸿蒙上的Flutter适配实践

1. 为什么要在鸿蒙上做 eip55 适配如果你的团队正在把 Flutter 应用往鸿蒙上迁移,迟早会遇到链上地址校验这个需求。钱包类、行情类、签名工具类应用都绕不开一个基础能力:确认用户输入的是不是一个合法、没被篡改过的以太坊地址。这个需求看起来简单&am…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉