讲师中心 微信公众号

工具推荐

视频效率加速
AniShort
AniShort

AI短剧协同制作平台

Seko
Seko

AI短剧一键生成成片

Laper
Laper

剧本策划到成片协作

立刻MV
立刻MV

低成本歌曲 MV、视频生成

c++如何使用枚举类型_c++enum关键字用法【规范】

落涛姑娘_2137

落涛姑娘_2137

发布时间:2026-03-11 12:05:03

|

497人浏览过

|

来源于php中文网

原创

应优先使用enum class并显式指定底层类型,避免全局污染、跨平台大小不一致及越界赋值未定义行为;传统enum需加前缀且禁用using引入。

c++如何使用枚举类型_c++enum关键字用法【规范】

枚举值没加作用域,一不小心就污染全局

默认的 enum 会把所有枚举常量直接注入到外层作用域,比如定义了 enum Color { Red, Green, Blue };,之后就能直接写 Red,但万一其他头文件也定义了同名的 Red(比如在 StatusCode 里),编译器就报错或行为异常。

实操建议:

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

  • 优先用 enum class(C++11 起),它自带作用域和强类型检查:enum class Color { Red, Green, Blue };,使用时必须写 Color::Red
  • 如果必须用传统 enum(比如对接 C 接口),在命名上加前缀,如 Color_Red,别依赖编译器扩展(如 MSVC 的 /Za)
  • 避免在头文件里用 using 把枚举常量引入全局,例如 using Color::Red; —— 这等于主动污染

底层类型不指定,跨平台序列化可能出错

不显式指定底层类型的 enum,其实际存储大小由编译器决定(通常是 int,但不是强制)。在嵌入式、网络协议或内存布局敏感场景下,sizeof(Color) 在不同平台可能不同,导致结构体对齐错乱或序列化失败。

实操建议:

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

  • 用 enum : uint8_t 或 enum class Status : uint16_t 显式声明底层类型,确保可预测的大小
  • 底层类型必须是整型(char、short、int、long long 等),不能是 float 或自定义类
  • 注意:enum class 不支持隐式转为整数,要转得用 static_cast<int>(Color::Red)</int>,这是安全代价换来的可控性

枚举值越界赋值不报错,运行时行为未定义

C++ 允许把任意整数赋给枚举变量,比如 Color c = static_cast<color>(999);</color>。编译器通常不警告,但后续用 switch(c) 时若没写 default,就可能跳过所有分支;更糟的是,某些优化模式下,编译器会假设枚举值只在合法范围内,直接删掉“不可能”的代码分支。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载

实操建议:

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

  • 对输入值做校验:用 if (c >= Color::Red && c (前提是底层类型一致且连续)
  • 用 switch 时务必加 default 分支,哪怕只是 throw std::invalid_argument("bad enum value");
  • 工具链可启用 -Wswitch-enum(GCC/Clang)提醒漏掉枚举分支,但对越界值无能为力

想遍历枚举?C++ 标准没提供,别硬写 for 循环

有人写 for (int i = Red; i 去“遍历”枚举,这很危险:枚举值不一定连续(比如 <code>enum X { A=1, B=5, C=10 };),也不保证正序排列;而且 int 到 enum 的转换是未定义行为(除非值在合法范围内)。

实操建议:

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

  • 真需要遍历,显式定义数组:constexpr std::array<color> all_colors = {Color::Red, Color::Green, Color::Blue};</color>
  • 配合 constexpr + 模板元编程(如 std::make_integer_sequence)可生成索引映射,但复杂度高,小项目不值得
  • 别依赖 std::underlying_type_t<color></color> 自动推导范围——它只告诉你底层类型,不告诉你哪些值被定义过

枚举本身轻量,但它的边界模糊性容易藏在看似简单的赋值和比较里。最麻烦的不是语法不会用,而是忘记它本质仍是整数,而整数的自由度远超设计预期。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

相关专题

更多
css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

7687

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

904

2025.10.23

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6384

2023.10.24

switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

1071

2023.09.21

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

1457

2024.03.13

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

5454

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

5631

2025.07.04

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7519

2023.08.02

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

20

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn