枚举是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(枚举)是一种用户自定义的数据类型,它可以让一组整型常量以更具可读性的方式命名。简单来说,它的作用是把数字和名字绑定起来,方便理解和使用。
什么是枚举?
枚举最常见的用途是表示一些有固定选项的状态或类别。比如颜色、星期几、错误码等。
默认情况下,枚举值从0开始递增:
立即学习“C++免费学习笔记(深入)”;
enum Color { RED, // 0 GREEN, // 1 BLUE // 2};
你也可以手动指定某个值,后面的会继续递增:
enum Status { SUCCESS = 0, WARNING = 5, ERROR // 这里就是6};
如何定义一个枚举?
定义一个枚举的基本语法如下:
enum 枚举名 { 值1, 值2, ...};
还可以加上 class 或 struct 的关键字来创建“作用域枚举”,避免名字冲突:
enum class Day { Monday, Tuesday, Wednesday};
这样在使用的时候就需要带上作用域:
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++ 中虽然基础,但用好了能大大提升代码的清晰度和安全性。
以上就是C++的enum是什么?如何定义和使用?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1462639.html
微信扫一扫
支付宝扫一扫