当前位置: 首页 > news >正文

C++中的枚举与位域

  1. 枚举

在传统 C++中,枚举类型并非类型安全,枚举类型会被视作整数,则会让两种完全不同的枚举类型可以进行直接的比较(虽然编译器给出了检查,但并非所有),甚至同一个命名空间中的不同枚举类型的枚举值名字不能相同,这通常不是我们希望看到的结果。

C++11 引入了枚举类(enumeration class),并使用 enum class 的语法进行声明:

enum classnew_enum : unsignedint {value1,value2,value3 = 100,value4 = 100
};

这样定义的枚举实现了类型安全,首先他不能够被隐式的转换为整数,同时也不能够将其与整数数字进行比较, 更不可能对不同的枚举类型的枚举值进行比较。但相同枚举值之间如果指定的值相同,那么可以进行比较:

if (new_enum::value3 == new_enum::value4) {// 会输出std::cout << "new_enum::value3 == new_enum::value4" << std::endl;
}

在这个语法中,枚举类型后面使用了冒号及类型关键字来指定枚举中枚举值的类型,这使得我们能够为枚举赋值(未指定时将默认使用 int)。

而我们希望获得枚举值的值时,将必须显式的进行类型转换,不过我们可以通过重载 << 这个算符来进行输出,可以收藏下面这个代码段:

#include<iostream>template<typename T>
std::ostream& operator<<(typename std::enable_if<std::is_enum<T>::value,std::ostream>::type& stream, const T& e)
{return stream << static_cast<typename std::underlying_type<T>::type>(e);
}

这时,下面的代码将能够被编译:

std::cout << new_enum::value3 << std::endl

节介绍了现代 C++ 中对语言可用性的增强,其中笔者认为最为重要的几个特性是几乎所有人都需要了解并熟练使用的:

  1. auto 类型推导

  1. 范围 for 迭代

  1. 初始化列表

  1. 位域

位域就是含有一定数量二进制位的变量,变量的类型通常应该是无符号整形。位域的声明形式是变量名后跟一个冒号和一个常量表达式,表达式用来指定变量所占的二进制位数

相关文章:

C++中的枚举与位域

枚举在传统 C中&#xff0c;枚举类型并非类型安全&#xff0c;枚举类型会被视作整数&#xff0c;则会让两种完全不同的枚举类型可以进行直接的比较&#xff08;虽然编译器给出了检查&#xff0c;但并非所有&#xff09;&#xff0c;甚至同一个命名空间中的不同枚举类型的枚举值…...

第19章 MongoDB Limit与Skip方法教程

第19章 MongoDB Limit与Skip方法教程 MongoDB Limit() 方法 如果仁兄需要在MongoDB中读取指定数量的数据记录&#xff0c;可以使用MongoDB的Limit方法&#xff0c;limit()方法接受一个数字参数&#xff0c;该参数指定从MongoDB中读取的记录条数。 语法 limit()方法基本语法请…...

进程间通信——消息队列

多线程 进程间通信——消息队列 消息队列——发送 测试代码 #include <sys/types.h> #include <sys/msg.h> #include <sys/ipc.h>#include <stdlib.h> #include <stdio.h> #include <string.h>#define MAX_BUF_SIZE 255struct msgtype {…...

OpenMMLab 实战营打卡 - 第 7 课

OpenMMLab MMSegmentation内容概要MMSegmentation统一超参MMSegmentation 的项目结构分割模型的模块化设计分割模型的配置文件主干网络的配置ResNet v1c主解码头的配置辅助解码头的配置数据集配置数据处理流水线常用训练策略参考资料内容概要 • MMSegmentation 项目概述 • M…...

MAC Boook打印长图

有时老师给留的作业是一张长图&#xff0c;直接打印或者通过把图放入word打印都不能实现把长页分成多页进行打印。通过网上找到思路可以通过EXCEL实现将长图分成多页打印。 测试版本 macos&#xff1a;ventura 13.1 office 365 注&#xff1a;同样适用windows版本的excel 第…...

web3:区块链共识机制系列-POS(Proof of Stake)股权证明算法

web3相关学习一并收录至该博客&#xff1a;web3学习博客目录大全 前情衔接&#xff1a;web3:区块链常见的几大共识机制及优缺点 目录前言算法公式与原理算法公式运作原理以Peer Coin为例缺陷优点缺点特点分类发展历程casper协议1.什么是无成本利益关系问题2.引入casper协议解决…...

Linux fork()系统调用流程解析

1. fork()函数介绍&#xff08;百度百科&#xff09; fork系统调用用于创建一个新进程&#xff0c;称为子进程&#xff0c;它与进程&#xff08;称为系统调用fork的进程&#xff09;同时运行&#xff0c;此进程称为父进程。创建新的子进程后&#xff0c;两个进程将执行fork&…...

自定义软件帮助文档(qt assistant实现)

网上搜了一下&#xff0c;软件的帮助文档&#xff0c;三个都可以&#xff1a;https://github.com/zealdocs/zeal&#xff0c;https://zealdocs.org/&#xff0c;看看这个博客说的 https://blog.csdn.net/libaineu2004/article/details/125028913&#xff0c;这个也是开源的&…...

ESP32设备驱动-GPIO外部中断

GPIO外部中断 文章目录 GPIO外部中断1、GPIO中断介绍2、GPIO中断使用步骤3、软件准备4、硬件准备5、代码实现在前面的文章 ESP32设备驱动-GPIO数字输入与输出中介绍如何对GPIO进行控制操作。本文将在该基础上使用GPIO中断进一步优化按键输入。即演示如何使用GPIO中断。 1、GPI…...

【安全】nginx反向代理+负载均衡上传webshel

Nginx负载均衡下上传webshell 什么是反向代理&#xff1f; 正向代理就是代替客户端进行各种服务的访问以及获取&#xff1b;那么反向代理自然就是代替服务器进行事务处理&#xff0c;就是此时的代理服务器负责将用户的各项请求做一个汇总、分类&#xff0c;将其分发到不同的服务…...

华为OD机试 - 单词接龙(Python)| 真题,思路,知识点

单词接龙 题目 单词接龙的规则是: 可用于接龙的单词,首字母必须要与前一个单词的尾字母相同; 当存在多个首字母相同的单词时,取长度最长的单词; 如果长度也相等,则取字典序最小的单词; 已经参与接龙的单词不能重复使用; 现给定一组全部由小写字母组成的单词数组, 并指…...

[ 系统安全篇 ] window 命令禁用用户及解禁方法

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…...

Https 协议超强讲解(二)

浏览器是如何确保 CA 证书的合法性&#xff1f; 1. 证书包含什么信息&#xff1f; 颁发机构信息 公钥 公司信息 域名 有效期 指纹 …… 2. 证书的合法性依据是什么&#xff1f; 首先&#xff0c;权威机构是要有认证的&#xff0c;不是随便一个机构都有资格颁发证书&am…...

C语言的程序环境和预处理详解

目录 一、程序的翻译环境和执行环境 二、编译和链接详解 2、1 翻译环境 2、2 编译过程详解 2、3 执行环境 三、预处理详解 3、1 预定义符号 3、2 #define 3、2、1 #define定义的符号 3、2、2 #define 定义宏 3、2、3 #define 替换规则 3、3 宏和函数的对比 3、4 条件编译 3、5…...

3.JUC【Java面试第三季】

3.JUC【Java面试第三季】前言推荐3.JUC06_闲聊AQS面试1.题目说明07_可重入锁理论2.可重入锁说明“可重入锁”这四个字分开来解释可重入锁的种类08_可重入锁的代码验证-上09_可重入锁的代码验证-下3.LockSupport10_LockSupport是什么LockSupport是什么11_waitNotify限制线程等待…...

Linux防火墙(7)

实验目的 通过该实验了解Linux防火墙iptables实现原理&#xff0c;掌握iptables基本使用方法&#xff0c;能够利用iptables对操作系统进行加固。预备知识基本原理 netfilter/iptables&#xff08;简称为iptables&#xff09;组成Linux平台下的包过滤防火墙&#xff0c;具有完成…...

2.11整理(2)(主要关于teacher forcing)

teacher forcing 训练迭代过程早期的RNN预测能力非常弱&#xff0c;几乎不能给出好的生成结果。如果某一个unit产生了垃圾结果&#xff0c;必然会影响后面一片unit的学习。RNN存在着两种训练模式(mode): free-running mode&#xff1a;就是常见的那种训练网络的方式: 上一个sta…...

亿级高并发电商项目-- 实战篇 --万达商城项目 三(通用模块、商品服务模块、后台API模块、IDEA忽略文件显示等开发工作

专栏&#xff1a;高并发项目 &#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信支付、若依框…...

IDEA下java程序的调试(简易实例图示版)

在线排版不太好看&#xff0c;介意的读者可下载word下来看&#xff1a;https://download.csdn.net/download/xijinno1/87441301IDEA下java程序的简单调试-System.out.println首先本次进行调试的一个程序是实现从1累加到100的功能&#xff0c;是在IDEA下进行编写的。如图所示&am…...

动态规划算法

1.应用场景-背包问题 背包问题&#xff1a;有一个背包&#xff0c;容量为 4 磅 &#xff0c; 现有如下物品 要求达到的目标为装入的背包的总价值最大&#xff0c;并且重量不超出要求装入的物品不能重复 2.动态规划算法介绍 动态规划(Dynamic Programming)算法的核心思想是&…...

在校生想进网络安全行业?聊聊NISP二级这个‘校园版CISP’的含金量与报考全攻略

在校生如何通过NISP二级证书抢占网络安全行业先机 当各大高校计算机相关专业的学生还在为毕业后的就业方向发愁时&#xff0c;一批有远见的同学已经悄悄考取了被称为"校园版CISP"的NISP二级证书。这张由中国信息安全测评中心颁发的国家级证书&#xff0c;正在成为网络…...

VirtualRouter:3分钟将Windows电脑变身为免费WiFi热点

VirtualRouter&#xff1a;3分钟将Windows电脑变身为免费WiFi热点 【免费下载链接】VirtualRouter Wifi Hotspot for Windows computers (Windows 7, 8.x, Server 2012 and newer!) 项目地址: https://gitcode.com/gh_mirrors/vi/VirtualRouter 你是否曾遇到这样的情况&…...

RAG系统安全攻防:从PoisonedRAG看检索增强生成的风险与防御

1. 项目概述&#xff1a;当检索增强生成遭遇“毒药”最近在开源社区里&#xff0c;一个名为“PoisonedRAG”的项目引起了我的注意。这个名字本身就充满了戏剧性——“中毒的RAG”。作为一名长期关注大语言模型应用落地的从业者&#xff0c;我立刻意识到&#xff0c;这绝不是一个…...

杰理之RX 端 长按软关机后无法唤醒【篇】

问题描述&#xff1a;RX端长按进入软关机后&#xff0c;无法唤醒问题&#xff0c;...

手机写作app2026推荐,助力高效创作体验

手机写作app2026推荐&#xff0c;助力高效创作体验在当今数字化时代&#xff0c;手机写作app成为了众多创作者的得力助手。据《2026 中国数字写作行业报告》显示&#xff0c;2026 年手机写作app的用户规模同比增长了 35%&#xff0c;但能真正满足创作者多样化需求的app仅占 20%…...

新手避坑指南:用Virtuoso和Calibre做DRC/LVS检查时,IO Pad和电源连接的那些坑

数字后端验证实战&#xff1a;Virtuoso与Calibre中的DRC/LVS避坑指南 第一次用Virtuoso和Calibre做DRC/LVS检查的新手工程师&#xff0c;往往会在IO Pad和电源连接上栽跟头。这些看似基础的问题&#xff0c;轻则导致验证失败&#xff0c;重则影响芯片功能。本文将结合SIMC 0.18…...

从JAR包到原生二进制:我的SpringBoot应用在Linux服务器上‘瘦身’实战记录(GraalVM 22.1.0 + Maven)

从JAR包到原生二进制&#xff1a;我的SpringBoot应用在Linux服务器上‘瘦身’实战记录 去年接手的一个电商促销系统&#xff0c;随着业务增长&#xff0c;JAR包启动时间从最初的8秒延长到23秒。某次大促期间&#xff0c;服务扩容时JVM预热导致的响应延迟直接影响了转化率——这…...

函数调用(Function Calling)深度集成:让 AI 安全执行企业 API

系列导读 你现在看到的是《Spring AI 企业级集成与场景实践:从零搭建智能应用》的第 5/10 篇,当前这篇会重点解决:展示如何让 AI 安全可控地操作企业后端服务,实现真正的智能体能力。 上一篇回顾:第 4 篇《检索增强生成(RAG)实战:Spring AI 集成向量数据库实现知识问…...

手把手教你给天邑TY1608机顶盒刷机(S905L3B芯片,支持RTL8822CS/MT7668无线模块)

天邑TY1608机顶盒刷机全攻略&#xff1a;从零开始玩转S905L3B芯片 第一次拿到天邑TY1608机顶盒时&#xff0c;你可能被它原厂系统的各种限制所困扰——预装软件无法卸载、广告弹窗频繁出现、存储空间严重不足。这款搭载Amlogic S905L3B芯片的设备&#xff0c;配合RTL8822CS或MT…...

用Python自动化Photoshop:解锁高效图像处理的终极指南

用Python自动化Photoshop&#xff1a;解锁高效图像处理的终极指南 【免费下载链接】photoshop-python-api Python API for Photoshop. 项目地址: https://gitcode.com/gh_mirrors/ph/photoshop-python-api Photoshop Python API 是一款强大的工具包&#xff0c;让开发者…...