news 2026/6/7 7:20:34

游戏开发中 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/5/23 8:31:17

5分钟上手IndexTTS 2.0,中文多音字发音终于准了

5分钟上手IndexTTS 2.0&#xff0c;中文多音字发音终于准了 你有没有被这些声音问题卡住过&#xff1f; “重”字读成“zhng”还是“chng”&#xff1f; “行”在“银行”里发“hng”&#xff0c;在“行动”里却要念“xng”——AI一开口就错&#xff1b; 配音时语速快了&#…

作者头像 李华
网站建设 2026/6/5 22:09:56

Z-Image-Turbo无法访问?7860端口问题排查全流程

Z-Image-Turbo无法访问&#xff1f;7860端口问题排查全流程 1. 问题定位&#xff1a;为什么打不开 http://localhost:7860&#xff1f; 你兴冲冲地执行完 bash scripts/start_app.sh&#xff0c;终端也显示了那行让人安心的提示&#xff1a; 启动服务器: 0.0.0.0:7860 请访问…

作者头像 李华
网站建设 2026/5/15 12:50:00

VibeVoice许可证合规使用:MIT协议下的商业应用边界

VibeVoice许可证合规使用&#xff1a;MIT协议下的商业应用边界 1. 为什么谈许可证&#xff1f;——从一个真实困惑开始 你刚用VibeVoice生成了一段客户欢迎语音&#xff0c;准备嵌入到SaaS产品的交互流程中。系统运行流畅&#xff0c;音质自然&#xff0c;团队都很满意。但法…

作者头像 李华
网站建设 2026/6/4 21:40:29

微信联系开发者获取支持,cv_resnet18_ocr-detection售后无忧

微信联系开发者获取支持&#xff0c;cv_resnet18_ocr-detection售后无忧 OCR文字检测不是玄学&#xff0c;而是可落地、可调试、可定制的工程能力。当你在电商后台批量提取商品图中的参数&#xff0c;在政务系统中自动识别身份证信息&#xff0c;或在教育平台里解析学生手写作…

作者头像 李华