C++枚举类

news2024/11/26 8:28:47

枚举

C++11有作用域枚举和无作用域枚举

无作用域枚举

特点

  1. 全局作用域:无作用域枚举的成员(枚举值)在包含它们的作用域内是直接可见的,不需要使用枚举类型名称作为前缀。

  2. 隐式类型转换:无作用域枚举的成员可以隐式地转换为整数类型,这使得它们可以直接用在需要整数值的地方。

  3. 底层类型:在 C++98/03 中,无作用域枚举的底层类型是由编译器决定的,并且通常是足够存储所有枚举值的最小整数类型。在 C++11 及以后的版本中,可以显式指定无作用域枚举的底层类型。

有作用域枚举

特点

  1. 作用域限制:有作用域枚举的成员必须通过枚举类型名称访问。这样可以防止命名冲突,也更清晰地表达了代码意图。

  2. 强类型:与无作用域枚举不同,有作用域枚举不支持隐式转换到整数类型。这增加了类型安全性,避免了某些类型错误。

  3. 底层类型指定:在有作用域枚举中,可以显式地指定底层类型。这使得枚举在不同平台间具有更好的一致性和可控性。

  4. 前向声明:有作用域枚举支持前向声明,这意味着可以在不提供成员列表的情况下声明枚举类型。

有作用域枚举下 指定作用域

无作用域枚举易发生名称冲突

现代C++尽量用有作用域枚举

枚举项的性质

枚举项缺省用0初始化 依次递增

枚举项底层是整数值

可以用常量表达式修改枚举项的值

改变枚举项某一项 后面的项则依次递增

古老的C++代码会采用枚举的手段 定义constexpr static

指定枚举项底层类型 表明尺寸

如下 sizeof(color)打印出来将会变成1

枚举项可以隐式转换成整数类型

但是反过来整数不能转换成枚举项

如下图 编译不通过

不允许整数隐式转换成枚举的原因是容易产生歧义 导致程序错误

如下 fun(100)是写错还是真是意图 导致歧义 其次 C++有作用域枚举是强类型的

如果要用就要static_cast显示类型转换



枚举的定义与声明

无作用域枚举声明

有作用域枚举声明 

有作用域枚举缺省类型是int

联合体

将多个类型合并到一起省空间

枚举与联合一起使用

匿名联合

类似于无作用域

C++11联合体定义非内建类型

C++11 引入了能够在联合体中使用非内建类型的能力,这些类型包括具有自定义构造函数、析构函数、拷贝构造函数和拷贝赋值运算符的类。

关键特性

  1. 构造和析构:在联合体中使用具有非平凡构造函数和析构函数的类型时,必须显式地调用这些函数。这是因为联合体不会自动调用成员的构造函数和析构函数。

  2. 有限的类型:虽然 C++11 允许在联合体中使用更复杂的类型,但并不是所有类型都可以用。特别是,不能在联合体中使用具有虚函数或虚基类的类型。

  3. 显式管理:你需要手动管理联合体中对象的生命周期,包括合适地调用构造函数和析构函数。

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

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

相关文章

“新华三杯”第十届成都信息工程大学ACM程序设计竞赛(同步赛)L. 怎么走啊(最短路+二分 分段函数)

题目 登录—专业IT笔试面试备考平台_牛客网 思路来源 衡阳师范学院ac代码、pj学弟 题解 大致可以证明,在w从1e5减小到1的过程中, 之前某条反向边没有用到,现在需要用到反向边,也就是正向边用到的变少了 这样的变化有sqrt个&a…

【计算机网络基础1】网络层次划分和OSI七层网络模型

1、网络层次划分 为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了"开放系统互联参考模型",即著名的OSI/RM模型(Open Syste…

WPS宏批量修改图片尺寸

致谢 感谢网络各位大佬的分享,可以让我快速的学习这块内容。 JS宏代码

佳明(Garmin) fēnix 7X 增加小睡检测功能

文章目录 (一)零星小睡(二)小睡检测(三)吐槽佳明(3.1)心率检测(3.2)光线感应器(3.3)手表重量(3.4)手表续航 &a…

Nodejs后端+express框架

前言 基于vue3Node后台管理项目,补充nodejs和express相关知识。 文章目录 一,express 1.官网 Express - 基于 Node.js 平台的 web 应用开发框架 - Express中文文档 | Express中文网 2.安装 npm install express --save 二、MongoDB 特点 非关…

关于图像清晰度、通透度的描述

1、问题背景 在图像评测过程中,从主观上一般怎么去评判一副图像的优劣呢? 比较显而易见的就是图像的清晰度和通透度,他们决定了评判者对画质的第一印象。 那怎么去理解图像的清晰度和通透度呢?这是本文要描述的内容。 2、问题分…

reinforce 跑 CartPole-v1

gym版本是0.26.1 CartPole-v1的详细信息,点链接里看就行了。 修改了下动手深度强化学习对应的代码。 然后这里 J ( θ ) J(\theta) J(θ)梯度上升更新的公式是用的不严谨的,这个和王树森书里讲的严谨公式有点区别。 代码 import gym import torch from …

二十一章网络通信

计算机网络实现了堕胎计算机间的互联,使得它们彼此之间能够进行数据交流。网络应用程序就是再已连接的不同计算机上运行的程序,这些程序借助于网络协议,相互之间可以交换数据,编写网络应用程序前,首先必须明确网络协议…

用23种设计模式打造一个cocos creator的游戏框架----(八)适配器模式

1、模式标准 模式名称:适配器模式 模式分类:结构型 模式意图:适配器模式的意图是将一个类的接口转换成客户端期望的另一个接口。适配器模式使原本接口不兼容的类可以一起工作。 结构图: 适用于: 系统需要使用现有的…

力扣题:数字与字符串间转换-12.11

力扣题-12.11 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:506. 相对名次 解题思想:进行排序即可 class Solution(object):def findRelativeRanks(self, score):""":type score: List[int]:rtype: List[str]"&…

Java学习笔记——instanceof关键字

instanceof关键字: 作用:保证对象向下转型的安全性在对象向下转型前判断某一对象实例是否属于某个类 判断时,如果对象是null,则 instanceof 判断结果为 false

搜狗输入法v模式 | 爱莉希雅皮肤

搜狗输入法v模式 | 爱莉希雅皮肤 前言爱莉希雅皮肤v模式 前言 搜狗输入法有v模式,v模式是一个转换和计算的功能组合。拥有数字转换、日期转换、算式计算、函数计算等功能。本文介绍如何使用v模式,并附赠一个爱莉希雅的皮肤,可通过百度网盘下…

订单系统的设计与海量数据处理实战

概述 订单系统可以说是整个电商系统中最重要的一个子系统,因此订单数据可以算作电商企业最重要的数据资产。订单系统从代码上来说可分为两部分:订单程序和历史订单处理程序。数据存储进行分库分表。 订单系统业务分析 对于一个合格的订单系统&#xf…

人力资源服务大赛活动方案

为加快人力资源服务业发展,进一步提升人力资源服务从业人员的专业化、职业化水平,推动云南省人力资源服务产业创新发展,促进行业服务规范,为云南省经济社会发展提供人力服务保障。云南省人力资源和社会保障厅计划组织开展“云南省…

vite脚手架,配置动态生成路由,添加不同的layout以及meta配置

实现效果,配置了layout和对应的路由的meta 我想每个模块添加对应的layout,下边演示一层layout及对应的路由 约束规则: 每个模块下,添加对应的 layout.vue 文件 每个文件夹下的 index.vue 是要渲染的页面路由 每个渲染的页面路由对…

关于python一些惯用写法、语法

关于python一些惯用代码处理 程序入口(python从脚本第一行开始运行,没有统一的入口)if __name__ __main__: filename.split("/")[-1][:-4][split("/")\[-1\] 和 split("/",-1)的区别](https://blog.csdn.net/jialibang/a…

分层网络模型(OSI、TCP/IP)及对应的网络协议

OSI七层网络模型 OSI(Open System Interconnect),即开放式系统互连参考模型, 一般都叫OSI参考模型,是ISO组织于1985年研究的网络互连模型。OSI是分层的体系结构,每一层是一个模块,用于完成某种功…

TailwindCSS 如何处理RTL布局模式

背景 TikTok作为目前全世界最受欢迎的APP,需要考虑兼容全世界各个地区的本地化语言和阅读习惯。其中对于阿拉伯语、波斯语等语言的阅读书写习惯是从右向左的,在前端有一个专有名字RTL模式,即Right-to-Left。 其中以阿拉伯语作为第一语言的人…

Oracle(2-14)User-Managed Incomplete Recovery

文章目录 一、基础知识1、Incomplete Recovery Overview 不完全恢复概述2、Situations Requiring IR 需要不完全恢复的情况3、Types of IR 不完全恢复的类型4、IR Guidelines 不完全恢复指南5、User-Managed Procedures 用户管理程序6、RECOVER Command Overview 恢复命令概述7…

深度学习:自注意力机制(Self-Attention)

1 自注意力概述 1.1 定义 自注意力机制(Self-Attention),有时也称为内部注意力机制,是一种在深度学习模型中应用的机制,尤其在处理序列数据时显得非常有效。它允许输入序列的每个元素都与序列中的其他元素进行比较&a…