C++枚举类(强类型枚举、强枚举)(枚举类与switch语句)

embedded/2024/9/23 9:33:10/

文章目录

  • C++枚举类及其应用深入解析
    • 引言
    • 枚举类的基本使用
      • 传统枚举的限制
        • - 类型安全不足
        • - 作用域污染
      • 枚举类的优势
        • - 强类型
        • - 作用域限定
        • - 指定底层类型
      • 声明和使用枚举类
        • - 基本语法
        • - 示例代码
    • 枚举类的高级应用
      • - 明确指定枚举值
      • - 底层类型的指定
      • - 枚举类与switch语句
    • 枚举类在现代C++中的实践意义

C++枚举类及其应用深入解析

引言

枚举类型(Enumerations)在C++中是一种用户定义的类型,它允许开发者为程序定义一个变量,这个变量限定在一组预定义的值之中。它非常适用于表示一组固定的常量,如星期、月份、状态码等。从C++11开始,C++引入了一种新的枚举类型,称为“枚举类”(或“强类型枚举”),它提供了更强的类型安全和更好的命名空间隔离。

枚举类的基本使用

传统枚举的限制

在C++11之前,传统的枚举存在一些限制:

- 类型安全不足

传统枚举的底层类型通常是整型,这使得它们可以与整数自由转换,可能导致类型安全问题。

- 作用域污染

枚举值会污染其所在的作用域,因为所有枚举值都是全局可见的。

枚举类的优势

枚举类解决了上述问题,具有以下特点:

- 强类型

枚举类不会隐式转换为其他类型,也不可以与其他类型的数值进行比较。

- 作用域限定

枚举类的值被限定在类内部,有效防止了全局作用域的污染。

- 指定底层类型

可以明确指定枚举类的底层类型,控制枚举类型的大小和性能。

声明和使用枚举类

- 基本语法
enum class Color : char {Red,Green,Blue
};enum class Direction {North,South,East,West
};
- 示例代码
#include <iostream>enum class Color {Red,Green,Blue
};void paint(Color color) {if (color == Color::Red) {std::cout << "Painting in Red" << std::endl;} else if (color == Color::Green) {std::cout << "Painting in Green" << std::endl;} else if (color == Color::Blue) {std::cout << "Painting in Blue" << std::endl;}
}int main() {paint(Color::Red);paint(Color::Blue);return 0;
}

枚举类的高级应用

- 明确指定枚举值

在枚举类中,可以为每个枚举值指定具体的整数值。

enum class StatusCode : int {Ok = 200,NotFound = 404,Error = 500
};

- 底层类型的指定

通过在枚举类的声明中指定类型,可以定义枚举值存储的底层类型。

enum class Port : unsigned short {HTTP = 80,HTTPS = 443
};

- 枚举类与switch语句

枚举类在 switch 语句中的使用可以增强代码的可读性和维护性。

enum class TrafficLight {Red,Yellow,Green
};void controlTraffic(TrafficLight light) {switch (light) {case TrafficLight::Red:std::cout << "STOP" << std::endl;break;case TrafficLight::Yellow:std::cout << "READY" << std::endl;break;case TrafficLight::Green:std::cout << "GO" << std::endl;break;}
}

枚举类在现代C++中的实践意义

枚举类通过提供更强的类型安全和作用域控制,为C++程序提供了更严谨的数据处理方式。在设计模式、状态机、配置管理等方面,枚举类都是控制程序流程、增强代码表达力的有效工具。

在使用现代C++进行项目开发时,适当使用枚举类不仅可以提高代码质量,还可以促进团队内部代码风格的一致性,降低维护成本。


http://www.ppmy.cn/embedded/104996.html

相关文章

20-22 - 打造专业的编译环境

---- 整理自狄泰软件唐佐林老师课程 文章目录 1. 大型项目的编译&#xff08;无第三方库&#xff09;1.1 大型项目的目录结构&#xff08;无第三方库&#xff09;1.2 项目结构设计分析1.3 需要打造的编译环境1.4 解决方案设计 2. 第 1 阶段任务2.1 关键的实现要点2.2 模块 make…

Maven <parent> 标签的作用及使用详解

在使用 Maven 进行项目构建时&#xff0c;<parent> 标签是一个非常重要的配置元素。它允许子模块继承父模块的配置&#xff0c;从而实现一致性和配置管理的简化。本文将详细介绍 <parent> 标签的主要作用&#xff0c;并通过示例来说明其使用方式和关键点。 <pa…

如何五分钟使用 Cocos Creator 快速部署 TON 游戏(第一部分)

TON 生态在游戏赛道的火热&#xff0c;吸引了大量的开发者涌入其中&#xff0c;但从技术角度看&#xff0c;EVM 兼容性以及开发语言等方面的问题&#xff0c;基于 TON 底层建立游戏应用对于很多开发者而言仍旧存在较高的门槛。而 Zypher Network 作为目前最先进的区块链游戏开发…

Apache CloudStack Official Document 翻译节选(十三)

快速部署一朵 Apache CloudStack 云 &#xff08;二&#xff09; 部署一朵pache CloudStack 云 安装Apache CloudStack的云内管理服务组件 本部分我们将安装Apache CloudStack的云内管理服务组件及周边工具。 关于数据库的安装与配置&#xff1a; 我们会安装和配置MySQL并配…

Pinia 与 Vuex 对比

Pinia 与 Vuex 对比 在开始之前&#xff0c;我们先给出Pinia和Vuex的官网地址&#xff0c;以便大家查阅最新的文档和更新信息&#xff1a; Pinia 官网地址&#xff1a;Pinia 官方网站 Vuex 官网地址&#xff1a;Vuex 官方网站 接下来&#xff0c;我们将深度解析Pinia和Vuex的…

论文速读|ReKep:空间时间理论的关系关键点约束,用于机器人操作

项目地址&#xff1a;ReKep | Spatio-Temporal ReasoningReKep | Spatio-Temporal Reasoning of Relational Keypoint Constraints for Robotic ManipulationReKep | Spatio-Temporal Reasoning ReKep&#xff08;Relational Keypoint Constraints&#xff09;是一种基于视觉的…

【大模型】GPT系列模型基础

前言&#xff1a;GPT整体上与transformer结构相似&#xff0c;但只用了decoder部分。 目录 1. GPT2. GPT23. GPT34. 知识补充4.1 下游任务实现方式4.2 sparse attention 1. GPT 预训练&#xff1a;无监督&#xff0c;根据前k个词预测下一个词的概率。微调&#xff1a; 有监督&a…

【大数据】深入解析向量数据库Faiss:搭建与使用指南

摘要&#xff1a;本文将介绍向量数据库的概念&#xff0c;重点讲解Faiss这一高性能相似性搜索库。通过分析官网内容&#xff0c;详细阐述Faiss的安装过程及使用方法&#xff0c;帮助读者快速上手并应用于实际项目中。 什么是向量数据 向量数据是一种数据类型&#xff0c;通常用…