C++初学者指南第一步---6.枚举和枚举类

C++初学者指南第一步—6.枚举和枚举类

文章目录

  • C++初学者指南第一步---6.枚举和枚举类
    • 1.作用域的枚举(enum class类型)(C++11)
    • 2.无作用域的枚举(enum类型)
    • 3.枚举类的基础类型
    • 4.自定义枚举类映射
    • 5.和基础类型的互相转换

1.作用域的枚举(enum class类型)(C++11)

语法:

enum class name { enumerator1, enumerator2, … enumeratorN };

默认值:每个枚举类映射到从 0 到 N-1 的整数

enum class day { mon, tue, wed, thu, fri, sat, sun };
day d = day::mon;      
d = day::tue;  // OK
d = wed;  // Err! 编译错误: 'wed' 只能在day作用域内
  • 仅限于命名范围的枚举类
  • 无法像某些其他语言那样查询枚举的属性

2.无作用域的枚举(enum类型)

语法:

enum name { enumerator1, enumerator2, … enumeratorN };

注意缺少关键字“class”。

enum day { mon, tue, wed, thu, fri, sat, sun };
day d = mon;  // OK!, 枚举值 "mon" 没有作用域
int i = wed;  // OK!, i = 2
enum stars { sun,};  // Err! 编译错误:名称冲突
  • 不局限于作用域的枚举⇒名称冲突
  • 危险的隐式转换为基础类型
  • 无法像某些其他语言那样查询枚举的属性

注意一下enum class和enum类型的区别,enum枚举类型从C语言开始就有了,C++中也继承了这一类型,那为什么还要增加enum class呢,主要有以下几个原因:

  1. 类型安全性:
    enum class 是一种强类型枚举(strongly typed enum)。它拥有更好的类型安全性,因为它的枚举值是被限定在枚举类型内部的。
    传统的 enum 是一种弱类型枚举(weakly typed enum)。它的枚举值可以隐式地转换为整型,容易造成意外的转换和错误。
  2. 命名空间:
    enum class 的枚举值是限定在该枚举类型的命名空间中的。要访问枚举值需要使用 EnumName::ValueName 的形式。
    enum 的枚举值直接存在于全局命名空间中,可以直接使用 ValueName 的形式访问。
  3. 默认基础类型:
    enum class 的默认基础类型是 int。但可以使用 enum class EnumName : underlying_type; 的形式指定其他整数类型作为基础类型。
    enum 的默认基础类型也是 int,但不能直接指定其他基础类型。
  4. 作用域:
    enum class 的作用域仅限于该枚举类型本身。
    enum 的作用域会"污染"全局命名空间。

注意:避免使用无限定作用域的枚举

3.枚举类的基础类型

  • 必须是整数类型(char、short、long、…)
  • 默认是int型
// 7个值 ⇒ char类型应该足够了
enum class day : char {mon, tue, wed, thu, fri, sat, sun
};
// 不超过10,000 ⇒ short类型应该足够了
enum class language_ISO639 : short {abk, aar, afr, aka, amh, ara, arg,};

4.自定义枚举类映射

  • 可以显式设置枚举类值
  • 不需要以 0 开头
  • 某些值可以省略
  • 可以是部分的(只有一些具有枚举值的枚举器)

注意:如果显式设置枚举类的枚举值,请对所有枚举类的枚举执行此操作

enum class month {jan = 1, feb = 2, mar = 3, apr = 4,  may = 5,  jun = 6,  jul = 7, aug = 8, sep = 9, oct = 10, nov = 11, dec = 12 
};
enum class flag {A = 2, B = 8, C = 5, D, E, F = 25
};

5.和基础类型的互相转换

enum class month {jan = 1, feb = 2, mar = 3, apr = 4,  may = 5,  jun = 6,  jul = 7, aug = 8, sep = 9, oct = 10, nov = 11, dec = 12 
};
枚举 → 整数整数→枚举
int i = static_cast(month::mar);
// i: 3
int i = 0;
cin >> i;
// 确定 i ≥ 1 and ≤ 12 …
month m1 = static_cast(i);

附上原文链接
如果文章对您有用,请随手点个赞,谢谢 ^_^ !
不来张图片就文章标题就很丑!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/29701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ std::forward()

在线调试网站&#xff1a; https://wandbox.org/ #include <iostream> #include <thread> #include <mutex> void func(int &&args) {std::cout << args << std::endl; }int main () {int a 10;func(20); …

idea 如何查看项目启动的端口号

方式一&#xff1a;查看Run/Debug Configurations: 打开IntelliJ IDEA&#xff0c;点击菜单栏的Run&#xff0c;然后选择Edit Configurations...&#xff0c;或者直接使用快捷键&#xff08;通常是Shift Alt F10然后选择Edit Configurations&#xff09;。 在打开的Run/Debug…

Python武器库开发-武器库篇之链接提取器(六十)

Python武器库开发-武器库篇之链接提取器&#xff08;六十&#xff09; 链接提取器介绍 链接提取器&#xff08;Link Extractor&#xff09;是一种用于从网页中提取链接的工具。它可以从网页的源代码中识别出所有的链接&#xff0c;并将这些链接提取出来。链接提取器可以用于各…

gitlab问题记录

You wont be able to pull or push project code via SSH until you add an SSH key to you 解决方案&#xff1a;https://blog.csdn.net/gufenchen/article/details/95663284

PHP框架详解-symfony框架

Symfony框架是一款面向PHP开发的开源框架&#xff0c;用于开发Web应用和RESTful API。它的目标是提高开发效率、可维护性和可扩展性。本文将详细介绍Symfony框架的核心概念、基本用法和高级特性。 第一部分&#xff1a;入门篇 简介&#xff1a;介绍Symfony框架的背景、特点和…

Python第二语言(十二、SQL入门和实战)

目录 1. Python中使用MySQL 1.1 pymysql第三方库使用MySQL 1.2 连接MySQL 1.3 操作数据库&#xff0c;创建表 1.4 执行查询数据库语句 2. python中MySQL的插入语句 2.1 commit提交 2.2 自动提交 3. pymysql案例 3.1 数据内容 3.2 DDL定义 3.3 实现步骤 3.4 文件操…

赶紧收藏!2024 年最常见 20道设计模式面试题(四)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 20道设计模式面试题&#xff08;三&#xff09;-CSDN博客 七、结构型模式&#xff1a;请解释适配器模式和装饰器模式的区别。 适配器模式&#xff08;Adapter Pattern&#xff09;和装饰器模式&#xff08;Decorato…

用python克隆了前男友的声音

声音克隆开源项目推荐&#xff1a;MockingBird 项目简介 MockingBird 是一个由开源社区开发的声音克隆项目&#xff0c;托管在 GitHub 上。该项目旨在通过深度学习技术实现高质量的声音克隆&#xff0c;使用户能够合成任意人的声音&#xff0c;并生成自然、流畅的语音输出。M…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 单词大师(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

多版本GCC安装及切换

目录 1 背景2 安装3 配置4 切换4.1 切换到版本94.2 切换到版本10 1 背景 最近在研究C20中的协程需要安装GCC版本10。用到GCC多版本切换&#xff0c;记录步骤。 2 安装 运行如下命令安装两个版本编译器: sudo apt install gcc-9 g-9 sudo apt install gcc-10 g-103 配置 使…

010-基于Sklearn的机器学习入门:聚类(上)

本节及后续章节将介绍深度学习中的几种聚类算法&#xff0c;所选方法都在Sklearn库中聚类模块有具体实现。本节为上篇&#xff0c;将介绍几种相对基础的聚类算法&#xff0c;包括K-均值算法和均值漂移算法。 目录 10.1 聚类概述 10.1.1 聚类的种类 10.1.2 Sklearn聚类子模…

shell脚本使用

判断程序有没有运行 &#xff0c;没有则启动程序 #!/bin/sh# 替换为你要检查的程序名称 program_name"xxx"# 使用pgrep命令查找程序的进程ID pid$(pgrep -f "$program_name")# 如果没有找到进程ID&#xff0c;说明程序没有运行&#xff0c;启动程序 if [ …

搭建zookeeper、Kafka集群

搭建zookeeper、Kafka集群 1、绘制kafka的存储结构、副本机制2、搭建zookeeper集群3、搭建kafka集群4、使用kafka创建名为自己姓名汉语拼音的topic5、查看topic的分区和副本策略 1、绘制kafka的存储结构、副本机制 2、搭建zookeeper集群 实验环境准备&#xff1a; 3台服务器&…

封装一个工具类,拒绝重复代码!

一、介绍 为了简化开发过程并提高代码的可维护性&#xff0c;我们可以创建一个统一的工具类来处理这些需求。 在本文中&#xff0c;我将介绍如何使用SpringBoot创建一个返回多级菜单、多级评论、多级部门、多级分类的统一工具类。 介绍数据库字段设计 数据库设计 「主要是…

在C语言中,可以使用strtol函数来将字符串中的16进制数转换为10进制整数

在C语言中&#xff0c;可以使用strtol函数来将字符串中的16进制数转换为10进制整数&#xff0c;进而转换为MAC地址的字节表示。以下是一个将字符串形式的MAC地址转换为16进制表示的例子&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.…

npm install cnpm -g 报错4048

npm install cnpm -g 报错4048 设置淘宝镜像&#xff1a; 报错如下&#xff1a; 其他博主提供的方法都尝试了&#xff0c;比如管理员权限打开终端&#xff0c;删除.npmrc文件&#xff0c;清除缓存npm cache clean -f等都试了无效&#xff0c;最后怀疑是npm和cnpm版本不对应&…

数据库面试题-Redis

数据库面试题-Redis 1、Redis是什么?2、为什么要使用Redis?3、说说Redis和Memcache的异同?4、说说Redis的线程模型?5、为什么Redis是单线程模型效率也能那么高?6、为什么Redis需要把所有数据放到内存中?7、说说Redis 的同步机制?8、Redis中pipeline有什么好处,为什么要…

Springboot全局异常处理和统一返回结果

①统一返回结果 package com.ioc.exception;import lombok.Data;import java.io.Serializable;/*** 后端统一返回结果* param <T>*/ Data //使用泛型对Result返回类进行了封装 public class Result<T> implements Serializable {private Integer code; //编码&…

JSP之原理剖析

什么是JSP&#xff1a; java Server Pages: java服务端页面,也和Servlet一样&#xff0c;用于动态Web技术&#xff1f; 最大特点&#xff1a; 写jsp就像在写HTML区别&#xff1a; HTML只给用户提供静态的数据JSP页面中可以嵌入Java代码&#xff0c;为用户提供动态数据 JSP原…

基于STM32和人工智能的智能四轴飞行器系统

目录 引言环境准备智能四轴飞行器系统基础代码实现&#xff1a;实现智能四轴飞行器系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统4.4 用户界面与数据可视化应用场景&#xff1a;智能飞行器管理与优化问题解决方案与优化收尾与总结 1. 引言 随着无人机技术的发展&…