首页 > 后端开发 > C++ > 正文

C++中的enum和enum class有什么区别?C++强类型枚举使用教程【代码安全】

穿越時空
发布: 2025-12-16 18:21:07
原创
881人浏览过
enum class 通过作用域隔离、类型安全和底层类型控制改进传统 enum:枚举值限定在类作用域内,避免命名冲突;禁止隐式整型转换,需显式转换;支持指定底层类型。

c++中的enum和enum class有什么区别?c++强类型枚举使用教程【代码安全】

主要区别作用域、类型安全和底层类型控制三方面。enum class 是 C++11 引入的改进方案,解决传统 enum 的命名污染和隐式转换问题,更适合现代 C++ 工程实践。

作用域隔离:避免命名冲突

传统 enum 的枚举值直接暴露在外层作用域,容易造成重定义错误。

  • red">enum Color { RED, GREEN }; → 后续再声明 int RED = 10; 会编译失败
  • enum class Status { RED, GREEN };int RED = 10; 完全合法,因为 Status::RED 和变量 RED 不同名空间
  • 多个 enum class 可以共用相同枚举名,比如 enum class Light { RED };enum class Car { RED }; 互不干扰

类型安全:禁止隐式整型转换

enum class 不允许与 int 或其他类型自动混用,强制显式转换,减少逻辑错误。

  • if (Color::RED → 编译报错;必须写成 if (static_cast(Color::RED)
  • void f(int x); f(Status::RED); → 错误;f(static_cast(Status::RED)); 才合法
  • 不同 enum class 类型之间也不能相互赋值,哪怕底层值相同

底层类型与前置声明支持

enum class 允许显式指定底层类型,并天然支持前置声明,利于头文件解耦。

达芬奇
达芬奇

达芬奇——你的AI创作大师

达芬奇 166
查看详情 达芬奇

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

  • enum class Flag : uint8_t { ON = 1, OFF = 0 }; → 明确内存占用为 1 字节
  • enum class Mode; → 可在头文件中前置声明,后续再定义,降低编译依赖
  • 传统 enum 若未指定底层类型(如 enum X {};),则无法前置声明;只有加了底层类型(enum X : int;)才可

基本上就这些。enum class 不是“替代”,而是“升级”——它让枚举真正成为有边界、有身份、可预测的类型,而不是一串裸露的整数别名。

以上就是C++中的enum和enum class有什么区别?C++强类型枚举使用教程【代码安全】的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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