当前位置: 首页 > news >正文

学习一下C++中的枚举的定义

目录

普通枚举

强类型枚举


普通枚举

枚举类型在C++中是通过关键字enum来定义的。下面是一个简单的例子:

enum Color {  RED,  GREEN,  BLUE  
};

在这个例子中,我们定义了一个名为Color的枚举类型,它包含了三个枚举值:REDGREENBLUE。默认情况下,第一个枚举值(在这个例子中是RED)的值为0,后续的枚举值会依次递增。所以,在这个例子中,RED的值为0,GREEN的值为1,BLUE的值为2。

当然,你也可以显式地为每个枚举值指定一个整数值:

enum Color {  RED = 1,  GREEN = 2,  BLUE = 4  
};

在这个修改后的例子中,RED的值为1,GREEN的值为2,BLUE的值为4。

你可以使用枚举类型来声明变量,并给这些变量赋值枚举值:

Color myColor = RED;

此外,你还可以使用枚举类型作为函数参数的类型,或者作为数组、结构或类的成员的类型。这都可以提高代码的可读性和可维护性。

注意:虽然枚举值在定义时是命名的整数值,但在使用时它们通常被视为它们的底层整数值。因此,你可以将枚举值赋给整数类型的变量,也可以将整数类型的值赋给枚举类型的变量(只要这个整数值在枚举值的范围内)。但是,这样做可能会降低代码的可读性和可维护性,所以应该尽量避免。

强类型枚举

在C++中,从C++11开始,你可以为枚举类型指定一个底层数据类型(underlying type),以控制枚举值的大小和范围。

#include <iostream>  enum class Color : unsigned char {  RED = 1,  GREEN = 2,  BLUE = 4  
};  int main() {  Color myColor = Color::RED;  // 输出枚举值的底层整数表示  std::cout << "The value of RED is: " << static_cast<unsigned char>(myColor) << std::endl;  // 尝试将一个大于底层类型范围的整数赋值给枚举变量(这会导致编译错误)  // Color myOtherColor = Color(256); // 这将不会编译通过,因为256超出了unsigned char的范围  return 0;  
}

在这个例子中,Color枚举类型被指定了一个底层数据类型unsigned char。这意味着枚举值REDGREENBLUE将使用unsigned char类型来存储。如果尝试将一个超出unsigned char范围的值赋给Color类型的变量,编译器将会报错。

注意,在这个例子中我还使用了enum class而不是enumenum class是C++11中引入的强类型枚举(strongly typed enumeration),它提供了更好的类型安全性和作用域控制。使用enum class时,枚举值需要使用枚举类型名和::作用域解析运算符来访问,例如Color::RED。而传统的enum(也称为非类型安全的枚举或旧式枚举)则没有这样的作用域限制,它们的枚举值将直接处于包含它们的命名空间中。

http://www.lryc.cn/news/389166.html

相关文章:

  • 开发一套java语言的智能导诊需要什么技术?java+ springboot+ mysql+ IDEA互联网智能3D导诊系统源码
  • C++| STL之string
  • [数据集][目标检测]游泳者溺水检测数据集VOC+YOLO格式4599张2类别
  • JAVA实现麦克风说话同声传译
  • LabVIEW与PLC通讯方式及比较
  • 2024/6/30 英语每日一段
  • Postman接口测试工具的原理及应用详解(五)
  • 208.贪心算法:买卖股票的最佳时机||(力扣)
  • 【论文阅读】伸缩密度比估计:Telescoping Density-Ratio Estimation
  • MongoDB数据库 MQL (MongoDB Query Language)语句大全
  • Java代码基础算法练习-计算平均身高-2024.07.02
  • BIOS设置与系统分区
  • linux的安装程序 与 文件 相关的命令
  • SAP_ABAP相关日语单词
  • Python中的除法操作详解
  • 第1章 人工智能的基础概念与应用导论
  • jenkins api部署时,一直提示pending-Finished waiting
  • AI在创造还是毁掉音乐之论文
  • C++ STL容器:序列式容器-数组string,vector,array,bitset
  • ElementUI样式优化:el-input修改样式、el-table 修改表头样式、斑马格样式、修改滚动条样式、
  • 大数据面试题之Spark(6)
  • SpringSecurity中文文档(Servlet Anonymous Authentication)
  • 【Spring Boot 事务管理】
  • 【C++】C++指针在线程中调用与受保护内存空间读取方法
  • 安全隔离上网的有效途径:沙箱
  • jenkins下后台运行链接Jenkins服务脚本方法
  • 宠物空气净化器哪个品牌性价比高?宠物空气净器Top3品牌推荐
  • 苏州大厂面试题JAVA 面试集
  • 数据库取出来的日期格式是数组格式,序列化日期格式
  • 【Android】创建一个可以在屏幕上拖动的悬浮窗