c++枚举详细介绍以及具体用法
C++ 中的枚举(Enumeration)是一种用于定义命名常量集合的数据类型。枚举可以提高代码的可读性和可维护性,让您可以使用有意义的名称来表示特定的取值,而不必使用原始的数字常量。
枚举的基本语法:
enum EnumName {
Value1,
Value2,
// ...
};
EnumName是枚举类型的名称。Value1,Value2, 等是枚举值的名称,也可以是任何有效的标识符。- 枚举值默认从0开始递增,可以通过显式赋值来指定具体的值。
枚举的具体用法:
- 代替常量: 枚举常用于替代整数常量,使代码更具可读性。
enum Color {
Red,
Green,
Blue
};
Color chosenColor = Green;
- 避免魔法数字: 枚举可以用于避免“魔法数字”,即在代码中直接使用未经解释的数字。
void processColor(Color color) {
if (color == Red) {
// 处理红色
} else if (color == Green) {
// 处理绿色
} else if (color == Blue) {
// 处理蓝色
}
}
- 指定枚举值: 您可以显式地为枚举值指定特定的整数值。
enum StatusCode {
OK = 0,
Error = -1,
NotFound = 404
};
StatusCode result = OK;
- 枚举作用域: 枚举可以位于命名空间或类的作用域内。
namespace MyNamespace {
enum Animal {
Dog,
Cat,
Bird
};
}
MyNamespace::Animal myPet = MyNamespace::Dog;
- 枚举类: 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++枚举详细介绍以及具体用法的更多相关文章
- Linux截屏工具scrot用法详细介绍
Scrot是Linux命令行中使用的截图工具,能够进行全屏.选取等操作,下面小编将针对Scrot截图工具的用法给大家做个详细介绍,通过操作实例来学习Scrot的使用. 在Linux中安装Scrot ...
- Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法
Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法 1. BeanFactory BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于 ...
- Java Annotation认知(包括框架图、详细介绍、示例说明)
摘要 Java Annotation是JDK5.0引入的一种注释机制. 网上很多关于Java Annotation的文章,看得人眼花缭乱.Java Annotation本来很简单的,结果说的人没说清楚 ...
- Java Annotation认知(包括框架图、详细介绍、示例说明)(转)
本文转自:http://www.cnblogs.com/skywang12345/p/3344137.html 网上很多关于Java Annotation的文章,看得人眼花缭乱.Java Annota ...
- Java 集合系列07之 Stack详细介绍(源码解析)和使用示例
概要 学完Vector了之后,接下来我们开始学习Stack.Stack很简单,它继承于Vector.学习方式还是和之前一样,先对Stack有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它. ...
- Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例
概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习.我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable.第1部分 Ha ...
- C++中引用与指针的区别(详细介绍)
C++中引用与指针的区别(详细介绍) C++中的引用与指针的区别 指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一 ...
- Android manifest之manifest标签详细介绍
AndroidManifest详细介绍 本文主要对AndroidManifest.xml文件中各个标签进行说明.索引如下: 概要PART--01 manifest标签PART--02 安全机制和per ...
- linux awk 内置函数详细介绍(实例)
这节详细介绍awk内置函数,主要分以下3种类似:算数函数.字符串函数.其它一般函数.时间函数 一.算术函数: 以下算术函数执行与 C 语言中名称相同的子例程相同的操作: 函数名 说明 atan2( y ...
- [转]详细介绍java中的数据结构
详细介绍java中的数据结构 本文介绍的是java中的数据结构,本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类.一起来看本文吧! 也许你已经熟练使用了java.util包里面的各 ...
随机推荐
- STM32低功耗配置
一.相关介绍 1.1 STM32下的电源管理 电源框图 电源标号说明 电压调节器 复位后调节器总是使能.以3种不同的模式工作. 运转模式:调节器以正常功耗模式提供1.8V电源(内核,内存和外设). 停 ...
- java.lang.reflect.UndeclaredThrowableException
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.Persiste ...
- CPython, Pypy, MicroPython...还在傻傻分不清楚?
哈喽大家好,我是咸鱼 当我们说 Python 时,通常指的是官方实现的 CPython 但还有很多比如 Pypy.Jython.MicroPython.Brython.RustPython 等 &qu ...
- 从零玩转系列之SpringBoot3-核心原理
一.简介 1.前置知识 ● Java17 ● Spring.SpringMVC.MyBatis ● Maven.IDEA 2.环境要求 环境&工具 版本(or later) SpringBoo ...
- Django App使用
App - 基本使用 作用主要用于业务功能模块开发 创建App > python manage.py startapp app01 创建成功后默认生成以下文件 默认文件讲解: 1. models ...
- 2023郑州轻工业大学校赛邀请赛wh
在这里,很感谢程立老师的帮助和选择我,我以后会跟着程老师,既然热爱,就要走下去! 2022年4月2号,我代表河南工业大学与郑州17所高校在郑州轻工业大学举办的"卓见杯"郑州轻工业大 ...
- 前后端分离实现注册+登录(Vue3.0 + Django3.2)
博客地址:https://www.cnblogs.com/zylyehuo/ 一.使用 vite+webstorm 搭建 Vue 环境,构建前端 1.结构树 2.main.js import { cr ...
- Django: 获取头信息
如何获取请求头信息 使用如下函数request.META.get("HTTP_请求头函数"),需要注意的是,请求头变量需要全部大写. 其他注意事项如下所示: 如果headerkey ...
- 加密解决HTTP协议带来的安全问题
HTTP协议默认是采取明文传输的,容易被中间人窃听.拦截.篡改,存在安全隐患. 常见提高安全性的方法是对通信内容进行加密,再进行传输,常见的加密方式有 不可逆加密:单向散列函数 可逆加密:对称加密.非 ...
- [ansible]常用内置模块
前言 ansible内置了很多模块,常用的并不多,可以通过ansible -l命令列出所有模块,使用 ansible-doc module-name 查看指定模块的帮助文档,例如:ansible-do ...