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

普通枚举和强制类枚举有什么区别?

示例代码:

#include <iostream> // 普通枚举 enum Color { Red, Green, Blue }; // 强类型枚举(类枚举) enum class Shape { Circle, Square, Triangle }; int main() { // 普通枚举:可以隐式转换为整数 Color c = Red; int num = c; // 合法,num = 0 std::cout << "普通枚举隐式转换:" << num << std::endl; // 强类型枚举:不能隐式转换为整数 Shape s = Shape::Circle; // int num2 = s; // 编译错误!必须显式转换 int num2 = static_cast<int>(s); // 合法,num2 = 0 std::cout << "强类型枚举显式转换:" << num2 << std::endl; // 普通枚举:作用域污染,枚举值直接暴露在全局/外层作用域 // if (Red == 0) {} // 合法,Red 直接可用 // 强类型枚举:必须通过 枚举名::枚举值 访问,无作用域污染 // if (Circle == 0) {} // 编译错误! if (Shape::Circle == static_cast<Shape>(0)) {} // 合法 return 0; }

一、作用域规则

1.普通枚举

枚举成员(如Red, Green, Blue),直接暴露在枚举定义的作用域中,会造成作用域污染

导致的问题:如果两个普通枚举有同名成员,会编译冲突

2.强类型枚举

枚举成员被封装在枚举类的作用域中,要使用需要通过枚举类名::成员访问,完全避免了作用域污染

二、类型安全性

1.普通枚举

枚举值可以隐式转换为整数型(int、long),容易导致一些意外类型错误的发生

2.强类型枚举

枚举值不可以转化为任何其他类型,必须通过static_cast<类型>(变量)进行显示转换,杜绝隐式类型错误

三、底层类型控制

1.普通枚举

底层整数类型由编译器决定(通常是int,但无明确标准),无法手动指定,跨平台可能有差异。

2.强类型枚举

可以显式指定底层类型(默认是int),提升代码的可移植性和可控性。

四、与sizeof结合

1.普通枚举

普通枚举的sizeof结果依赖编译器(可能是 4 字节 int,也可能是其他);

2.强类型枚举

强类型枚举的sizeof由显式指定的底层类型决定(比如指定uint8_tsizeof(Shape)= 1),结果可预测。

http://www.jsqmd.com/news/508092/

相关文章:

  • [逆向] x64dbg消息断点实战:从游戏交互到API追踪
  • DOTA数据集:遥感图像检测的黄金标准与实战指南
  • Qt Design Studio核心组件实战:从属性解析到界面构建
  • 从腕点姿态到关节转角:六轴机械臂Piper算法逆解实战解析
  • 网安工程师已离职,劝告想转行网安的人
  • 协议层漏洞闭环管理全链路,从MCP 2.0安全基线到实时动态策略下发的4级防护体系
  • 24WDC-DC矿用本质安全型电源的设计与保护功能详解,附带设计说明书、电路原理图与仿真文件
  • Qwen3-32B-Chat RTX4090D部署案例:政府政策文件智能摘要系统落地
  • android-实例1-数据库sqlite(依赖sqlite)
  • Qwen3.5-9B金融分析应用:财报PDF理解+结构化摘要生成
  • C# LINQ实战:IQueryable延迟执行原理与Entity Framework性能优化技巧
  • PlatformIO工程中高效管理外部库文件的4种实用方法
  • SOONet模型Matlab联合仿真:视频分析与算法验证工作流
  • GeoServer漏洞复现实战:从SQL注入到SSRF的5个关键CVE解析(附环境搭建指南)
  • 图片类PDF怎么转成可编辑的Word?三大妙招,轻松搞定!
  • 2026男士素颜霜排行|实测8款,油痘肌/新手闭眼冲不踩雷 - 品牌测评鉴赏家
  • Qwen3-32B-Chat效果对比:不同FlashAttention版本对RTX4090D推理性能影响
  • Clion配置EasyX图形库全攻略:从下载到运行第一个图形程序
  • 男士素颜霜排行|2026实测不踩雷,新手闭眼冲,伪素颜天花板! - 品牌测评鉴赏家
  • GLM-OCR企业级部署实战:构建高可用内网OCR服务集群
  • LingBot-Depth模型选择指南:lingbot-depth vs lingbot-depth-dc,哪个更适合你?
  • 手把手教你配置MusePublic:Ubuntu系统AI艺术创作环境全攻略
  • Linux性能监控实战:nmon命令参数详解与analyser图表自动化分析技巧
  • 微信5000好友,深夜无人可聊怎么破?
  • 利用nlp_structbert_sentence-similarity_chinese-large优化推荐系统:基于内容语义的相似物品推荐
  • 细胞分化轨迹分析避坑指南:Slingshot常见问题与解决方案
  • Windows远程会议音频录制进阶:捕获系统内部声音的立体声混音实战
  • Qt之QFile高效文件读写实践指南
  • C语言基础项目实战:编写简易客户端调用Ostrakon-VL-8B的REST API
  • GISBox实战:把无人机拍的LAS点云,变成网页上能飞的3DTiles模型