news 2026/2/9 15:22:57

游戏开发中 C++ 枚举的正确用法:必须用 `enum class`

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
游戏开发中 C++ 枚举的正确用法:必须用 `enum class`

在 Unreal Engine 或其他 C++ 游戏项目中,枚举常用于表示角色状态、技能类型、网络状态等。必须使用enum class,原因如下:

1. 避免命名冲突(关键!)

游戏系统多,不同模块可能定义相同名称的状态:

// ❌ 传统 enum:编译失败enumPlayerState{Idle,Attack};enumAIState{Idle,Patrol};// 错误:Idle 重定义// ✅ enum class:安全隔离enumclassEPlayerState{Idle,Attack};enumclassEAIState{Idle,Patrol};// 合法EPlayerState player=EPlayerState::Idle;EAIState ai=EAIState::Idle;// 无歧义

2. 类型安全,防止逻辑错误

游戏逻辑依赖状态判断,隐式转换易引发 bug:

enumclassEGameState{Paused=0,Running=1,GameOver=2};voidUpdate(){if(CurrentState==EGameState::GameOver){ShowGameOverUI();}// 不会因意外将状态当作数字运算(如 CurrentState + 1)}

3. 内存优化(对性能敏感)

游戏对象数量庞大,节省每个字节都很重要:

// 默认底层类型为 int(4 字节)// 显式指定为 uint8_t(1 字节),适合同步和存储UENUM(BlueprintType)enumclassECharacterAnim:uint8_t{WalkUMETA(DisplayName="Walking"),RunUMETA(DisplayName="Running"),JumpUMETA(DisplayName="Jumping")};

注:UENUMUMETA是 Unreal Engine 的反射宏,用于蓝图暴露。

4. 转换规则

  • 不能隐式转为整数
  • 如需获取数值(如存档、网络包),必须显式转换:
uint8 StateByte=static_cast<uint8>(CurrentState);

结论

在游戏开发中:

  • 永远不要用enum
  • 始终使用enum class
  • 指定底层类型(如: uint8_t)以节省内存。
  • 通过static_cast显式转换,确保意图明确。

这是保证代码健壮性、可维护性和性能的基础实践。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/7 13:50:38

C++ 结构体内存对齐终极指南:嵌套结构体如何“占位”?

在 C 开发中&#xff0c;尤其是涉及网络协议、硬件通信或高性能计算时&#xff0c;结构体的内存布局至关重要。你是否曾疑惑&#xff1a;为什么一个只包含 char 和 int 的结构体&#xff0c;sizeof 却是 8 而不是 5&#xff1f; 当结构体嵌套结构体时&#xff0c;内存是如何排布…

作者头像 李华
网站建设 2026/2/8 9:26:22

5个维度解析OR-Tools:从入门到解决资源调度问题

5个维度解析OR-Tools&#xff1a;从入门到解决资源调度问题 【免费下载链接】or-tools Googles Operations Research tools: 项目地址: https://gitcode.com/gh_mirrors/or/or-tools 你是否遇到过这些决策难题&#xff1f; 生产经理为订单排期焦头烂额&#xff0c;配送…

作者头像 李华
网站建设 2026/2/8 9:52:14

如何用VibeThinker-1.5B解决LeetCode编程题?附完整流程

如何用VibeThinker-1.5B解决LeetCode编程题&#xff1f;附完整流程 你是否试过在深夜刷LeetCode时卡在一道中等难度的动态规划题上&#xff0c;反复调试却始终无法通过全部测试用例&#xff1f;是否曾为一道需要多步数学推导的模拟题耗去两小时&#xff0c;最后发现只是边界条…

作者头像 李华
网站建设 2026/2/8 3:13:02

GLM-4-9B-Chat-1M部署案例:高校AI实验室低成本搭建1M上下文教学实验平台

GLM-4-9B-Chat-1M部署案例&#xff1a;高校AI实验室低成本搭建1M上下文教学实验平台 1. 项目背景与模型介绍 在高校AI实验室的教学与科研工作中&#xff0c;长文本理解与处理能力是许多研究课题的基础需求。传统的大模型部署方案往往面临两个痛点&#xff1a;一是长上下文支持…

作者头像 李华
网站建设 2026/2/7 22:15:36

LLaVA-v1.6-7b快速部署:Ollama 0.3+版本对LLaVA 1.6的原生支持

LLaVA-v1.6-7b快速部署&#xff1a;Ollama 0.3版本对LLaVA 1.6的原生支持 1. 认识LLaVA 1.6多模态模型 LLaVA&#xff08;Large Language and Vision Assistant&#xff09;是一个创新的多模态模型&#xff0c;它将视觉编码器与Vicuna语言模型相结合&#xff0c;实现了强大的…

作者头像 李华
网站建设 2026/2/8 10:32:53

DamoFD人脸检测实战:结合DeepFace进行表情识别预处理

DamoFD人脸检测实战&#xff1a;结合DeepFace进行表情识别预处理 你是不是也遇到过这样的问题&#xff1a;想做人脸表情分析&#xff0c;但第一步——把人脸从图片里准确框出来&#xff0c;就卡住了&#xff1f;要么漏检&#xff0c;要么框不准&#xff0c;关键点偏移&#xf…

作者头像 李华