0

0

C++的enum是什么?如何定义和使用?

下次还敢

下次还敢

发布时间:2025-06-09 21:03:01

|

1328人浏览过

|

来源于php中文网

原创

枚举是c++++中一种用户自定义的数据类型,用于将一组整型常量以可读性更强的方式命名,最常见的用途是表示固定选项的状态或类别,默认值从0开始递增,也可手动指定数值,如enum status { success = 0, warning = 5, error }; 定义枚举的基本语法为enum 枚举名 { 值列表 }; 推荐使用enum class来创建作用域枚举,避免命名冲突,如enum class day { monday, tuesday... }; 使用枚举的三大好处包括:1. 替代魔法数字提高代码可读性,例如用day::saturday判断周末;2. 作为状态标识符,如requeststatus表示网络请求状态并配合switch处理不同情况;3. 避免全局变量污染,通过enum class使不同枚举中的相同名称共存;使用时需注意:不要混用不同枚举值,尽量使用enum class提升类型安全,显式设置初始值有助于维护,且c++不支持直接输出枚举名称为字符串,需自行实现映射。

C++的enum是什么?如何定义和使用?

在C++中,enum(枚举)是一种用户自定义的数据类型,它可以让一组整型常量以更具可读性的方式命名。简单来说,它的作用是把数字和名字绑定起来,方便理解和使用。


什么是枚举?

枚举最常见的用途是表示一些有固定选项的状态或类别。比如颜色、星期几、错误码等。

默认情况下,枚举值从0开始递增:

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

enum Color {
    RED,   // 0
    GREEN, // 1
    BLUE   // 2
};

你也可以手动指定某个值,后面的会继续递增:

enum Status {
    SUCCESS = 0,
    WARNING = 5,
    ERROR    // 这里就是6
};

如何定义一个枚举?

定义一个枚举的基本语法如下:

enum 枚举名 {
    值1,
    值2,
    ...
};

还可以加上 classstruct 的关键字来创建“作用域枚举”,避免名字冲突:

enum class Day {
    Monday,
    Tuesday,
    Wednesday
};

这样在使用的时候就需要带上作用域:

Red Panda AI
Red Panda AI

AI文本生成图像

下载
Day today = Day::Monday;

枚举怎么用?

1. 替代魔法数字,提高代码可读性

比如写一个函数判断今天是否是周末:

enum class Day {
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
};

bool isWeekend(Day day) {
    return day == Day::Saturday || day == Day::Sunday;
}

比起用数字 5 和 6 来判断,这种写法更容易理解也更安全。

2. 作为状态标识符

在网络请求中,可以用枚举表示不同的状态:

enum class RequestStatus {
    Pending,
    Success,
    Failed
};

然后根据不同状态做处理:

void handleRequest(RequestStatus status) {
    switch(status) {
        case RequestStatus::Pending:
            std::cout << "等待响应..." << std::endl;
            break;
        case RequestStatus::Success:
            std::cout << "成功获取数据" << std::endl;
            break;
        case RequestStatus::Failed:
            std::cout << "请求失败" << std::endl;
            break;
    }
}

3. 避免全局变量污染(使用 enum class)

普通枚举的值会被“提升”到外层作用域,容易造成重名问题:

enum Color { RED, GREEN };
enum Fruit { RED, APPLE }; // 编译错误:RED重复了

改用 enum class 就可以解决这个问题:

enum class Color { RED, GREEN };
enum class Fruit { RED, APPLE };

Color c = Color::RED;
Fruit f = Fruit::RED;

定义和使用时需要注意什么?

  • 不要混用不同枚举类型的值:即使它们底层都是int,也不建议直接比较或赋值。
  • 尽量使用 enum class:避免命名冲突,提高类型安全性。
  • 显式设置初始值可以增强可维护性:尤其是用于协议或配置时,明确数值有助于排查问题。
  • 不能直接输出枚举名称:C++没有内置方法将枚举值转为字符串,需要自己实现映射。

基本上就这些。enum 在 C++ 中虽然基础,但用好了能大大提升代码的清晰度和安全性。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

297

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

216

2025.10.31

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

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

1435

2023.10.24

switch语句用法
switch语句用法

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

518

2023.09.21

Java switch的用法
Java switch的用法

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

404

2024.03.13

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

184

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

263

2023.10.25

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

179

2023.12.04

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

0

2025.12.31

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 5.7万人学习

C 教程
C 教程

共75课时 | 3.8万人学习

C++教程
C++教程

共115课时 | 10.5万人学习

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

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