C++ 中的枚举(Enumeration)是一种用于定义命名常量集合的数据类型。枚举可以提高代码的可读性和可维护性,让您可以使用有意义的名称来表示特定的取值,而不必使用原始的数字常量。

枚举的基本语法:

enum EnumName {
Value1,
Value2,
// ...
};
  • EnumName 是枚举类型的名称。
  • Value1, Value2, 等是枚举值的名称,也可以是任何有效的标识符。
  • 枚举值默认从0开始递增,可以通过显式赋值来指定具体的值。

枚举的具体用法:

  1. 代替常量: 枚举常用于替代整数常量,使代码更具可读性。
enum Color {
Red,
Green,
Blue
}; Color chosenColor = Green;
  1. 避免魔法数字: 枚举可以用于避免“魔法数字”,即在代码中直接使用未经解释的数字。
void processColor(Color color) {
if (color == Red) {
// 处理红色
} else if (color == Green) {
// 处理绿色
} else if (color == Blue) {
// 处理蓝色
}
}
  1. 指定枚举值: 您可以显式地为枚举值指定特定的整数值。
enum StatusCode {
OK = 0,
Error = -1,
NotFound = 404
}; StatusCode result = OK;
  1. 枚举作用域: 枚举可以位于命名空间或类的作用域内。
namespace MyNamespace {
enum Animal {
Dog,
Cat,
Bird
};
} MyNamespace::Animal myPet = MyNamespace::Dog;
  1. 枚举类: C++11 引入了枚举类(enum class),用于解决常规枚举的一些问题,例如枚举值之间的隐式转换和名称冲突。
enum class Status {
Active,
Inactive
}; Status state = Status::Active;

总之,枚举是一种有助于提高代码可读性和可维护性的数据类型。它可以用于代替常量、避免魔法数字、指定特定的值以及创建命名空间和作用域内的常量集合。 C++11 引入的枚举类也提供了更好的类型安全性和可控性。

以下是一个关于天气类型的枚举示例:

#include <iostream>

enum class Weather {
Sunny,
Cloudy,
Rainy,
Snowy
}; std::string getWeatherDescription(Weather weather) {
switch (weather) {
case Weather::Sunny:
return "It's sunny outside!";
case Weather::Cloudy:
return "It's a cloudy day.";
case Weather::Rainy:
return "Rain, rain, go away!";
case Weather::Snowy:
return "Let it snow, let it snow!";
} return "Unknown weather";
} int main() {
Weather currentWeather = Weather::Cloudy;
std::string description = getWeatherDescription(currentWeather); std::cout << description << std::endl; return 0;
}

在这个示例中,我们定义了一个枚举类型 Weather,其中包含了四种天气类型。然后,我们编写了一个函数 getWeatherDescription,根据传入的天气类型返回对应的天气描述。在 main 函数中,我们设置当前的天气类型为 Cloudy,并输出对应的天气描述。

通过使用枚举,我们能够以更具有可读性和可维护性的方式来表示天气类型,而不是直接使用数字或字符串。这可以帮助我们在代码中避免使用未解释的魔法值,并使代码更易于理解和维护。

c++枚举详细介绍以及具体用法的更多相关文章

  1. Linux截屏工具scrot用法详细介绍

    Scrot是Linux命令行中使用的截图工具,能够进行全屏.选取等操作,下面小编将针对Scrot截图工具的用法给大家做个详细介绍,通过操作实例来学习Scrot的使用.   在Linux中安装Scrot ...

  2. Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法

    Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法 1. BeanFactory BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于 ...

  3. Java Annotation认知(包括框架图、详细介绍、示例说明)

    摘要 Java Annotation是JDK5.0引入的一种注释机制. 网上很多关于Java Annotation的文章,看得人眼花缭乱.Java Annotation本来很简单的,结果说的人没说清楚 ...

  4. Java Annotation认知(包括框架图、详细介绍、示例说明)(转)

    本文转自:http://www.cnblogs.com/skywang12345/p/3344137.html 网上很多关于Java Annotation的文章,看得人眼花缭乱.Java Annota ...

  5. Java 集合系列07之 Stack详细介绍(源码解析)和使用示例

    概要 学完Vector了之后,接下来我们开始学习Stack.Stack很简单,它继承于Vector.学习方式还是和之前一样,先对Stack有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它. ...

  6. Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例

    概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习.我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable.第1部分 Ha ...

  7. C++中引用与指针的区别(详细介绍)

    C++中引用与指针的区别(详细介绍) C++中的引用与指针的区别   指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一 ...

  8. Android manifest之manifest标签详细介绍

    AndroidManifest详细介绍 本文主要对AndroidManifest.xml文件中各个标签进行说明.索引如下: 概要PART--01 manifest标签PART--02 安全机制和per ...

  9. linux awk 内置函数详细介绍(实例)

    这节详细介绍awk内置函数,主要分以下3种类似:算数函数.字符串函数.其它一般函数.时间函数 一.算术函数: 以下算术函数执行与 C 语言中名称相同的子例程相同的操作: 函数名 说明 atan2( y ...

  10. [转]详细介绍java中的数据结构

    详细介绍java中的数据结构 本文介绍的是java中的数据结构,本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类.一起来看本文吧! 也许你已经熟练使用了java.util包里面的各 ...

随机推荐

  1. 前端vue简单好用的上拉加载下拉刷新组件,支持列表分页 本地分页

    前端vue简单好用的上拉加载下拉刷新组件,支持列表分页 本地分页, 下载完整代码请访问uni-app插件市场地址: https://ext.dcloud.net.cn/plugin?id=12942 ...

  2. 检测手机系统是iOS还是android(可实现根据手机系统跳转App下载链接)

    快速实现检测手机系统是iOS还是android(可实现根据手机系统跳转App下载链接); 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin ...

  3. Thinkphp6 连接达梦数据库

    Thinkphp6 连接达梦数据库 这里使用 IDEA phpEnv PHP7.3 Thinkphp6 桌面操作系统:Windows11 虚拟机:VMware 服务器操作系统:银河麒麟 在虚拟机操作与 ...

  4. C++面试八股文:技术勘误

    不知不觉,<C++面试八股文>已经更新30篇了,这是我第一次写技术博客,由于个人能力有限,出现了不少纰漏,在此向各位读者小伙伴们致歉. 为了不误导更多的小伙伴,以后会不定期的出勘误文章,请 ...

  5. Profinet转EtherNet/IP网关连接AB PLC的应用案例

    西门子S7-1500 PLC(profinet)与AB PLC以太网通讯(EtherNet/IP).本文主要介绍捷米特JM-EIP-PN的Profinet转EtherNet/IP网关,连接西门子S7- ...

  6. 近期uniapp使用与总结

    弟弟是个uniapp小白,有什么问题欢迎指正. 吃什么饭对于有选择困难的我来说是个大问题,所以想做个根据自己输入的食物随机分配每餐吃的东西,然后就准备用uniapp做这样一个软件,主要是uniapp打 ...

  7. 图像格式及Matlab的格式转换

    1. matlab图像保存说明 matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,好处相比较默认matlab数据类型双精度浮点doubl ...

  8. Android文本编辑框点击弹出选择日期框

    前言: 个人Android小白,写到这了,就记录一下,希望可以帮助到大家. Android输入框点击弹出日期选择框 // 获取 文本编辑框控制权 EditText returnTime = findV ...

  9. CobaltStrike4.8--云服务器搭建

    系统版本选用 选择最熟悉的版本,我这边用的CentOS7.8,选用乌班图的话,会有一些命令的不一致 配置运行环境 CobaltStrike4.0支持jdk1.8的环境,4.5开始就不支持1.8了,本文 ...

  10. docker 镜像与容器存储目录结构

    目录列表及大小示例-20220314 root@dewan01:/var/lib/docker# du -sh * 88K buildkit 72K containers 884K image 60K ...