cpp enum & enum class

C++11学习笔记(3)—— enum 1.简介 以往的enum类型将枚举成员的作用域暴露在枚举变量之外,用户不需要指定枚举类型就可以直接使用枚举的内容,这就有可能会造成名字的冲突,为了解决该你问题,C++11引入了强类型的枚举类型(strongly typed enums ). 2.旧风格的enum #include "stdafx.h" #include using namespace std; enum OldEnu 阅读详情

enum是枚举类型就不多说了,用于自定义的数据。

现在说下enum和enum class有什么区别,为什么要用enum class。

enum有几种限制:
1.两个enum不能定义同样名称的数据,如下,会报重复定义的编译错误

// Defining enum1 Gender
 enum Gender { Male,
               Female };

 // Defining enum2 Gender2 with same values
 // This will throw error
 enum Gender2 { Male,
                Female };

2.如果一个名称在enum里,就不能再定义这个名称的变量,如下,会报重定义的编译错误。

// Defining enum1 Gender
enum Gender { Male,
              Female };

// Creating Gender type variable
Gender gender = Male;

// creating a variable Male
// this will throw error
int Male = 10;

3.enum是类型不安全的

// Defining enum1 Gender
 enum Gender { Male,
               Female };

 // Defining enum2 Color
 enum Color { Red,
              Green };

 // Creating Gender type variable
 Gender gender = Male;
 Color color = Red;

 // Upon comparing gender and color
 // it will return true as both have value 0
 // which should not be the case actually
 if (gender == color)
     cout << "Equal";

猜猜这两个enum会相等吗?
答案是会的,会输出"Equal",这明明是两个不同的enum,但是enum里面的默认值是一样的。
但编译器会报warning信息

warning: comparison between ‘enum main()::Gender’ and ‘enum main()::Color’

所以需要enum class,它有以下特点

使用时像下面这样

// Declaration
    enum class EnumName{ Value1, Value2};

// Initialisation
    EnumName ObjectName = EnumName::Value1;

enum class会克服enum的上面列举的限制

int main()
{
    //相同的名称可以出现在不同的enum class中
    enum class Color { Red,
                       Green,
                       Blue };
    enum class Color2 { Red,
                        Black,
                        White };
    enum class People { Good,
                        Bad };
 
    // 可以定义变量名和enum class里的相同
    int Green = 10;
 
    // Instantiating the Enum Class
    Color x = Color::Green;
 
    // Comparison now is completely type-safe
    if (x == Color::Red)
        cout << "It's Red\n";
    else
        cout << "It's not Red\n";
 
    People p = People::Good;
 
    if (p == People::Bad)
        cout << "Bad people\n";
    else
        cout << "Good people\n";
 
    // gives an error
    // if(x == p)
    // cout<<"red is equal to good";
 
    // won't work as there is no
    // implicit conversion to int
    // cout<< x;
 
    cout << int(x);
 
    return 0;
}
C++实现三元逻辑运算系统:从真值表到表达式求值 在计算机科学中,逻辑运算是程序设计的基石,传统的布尔逻辑(真/假)广泛应用于条件判断和算法控制。其原理基于真值表,通过逻辑门电路实现,技术价值在于为计算机提供了最基础的决策能力。然而,在数据库NULL值处理、多值电路设计等应用场景中,二值逻辑无法表达“未知”或“不确定”状态,这自然引出了对多值逻辑的需求。三元逻辑作为经典扩展,在C++中可以通过运算符重载和枚举类等技术,构建一套完整的运算系统。本文以C++实践为核心,详细拆解了如何从底层实现三元逻辑的**真值表**定义、**运算符重载**以及表达式解析求值器 阅读详情

相关推荐

c++中的enum类型

C++允许程序员创建自己的数据类型,比如本节要将的枚举类型。枚举数据类型是一种由程序员定义的数据类型,其合法值是与它们关联的一组命名整数常量。 之所以被称为枚举类型,就是因为命名常量是作为数据类型定义的一部分而枚举或列出的,以下是枚举类型声明的示例: enum Roster {Tom, Sharon, Bill, Teresa, John}; 该语句将创建一个名为 Roster 的数据类型。...

digitalkee的博客 2万+

C/CPP: Enum Class vs. Enum Type

from:Enum Classes in C++ and Their Advantage over Enum DataType - GeeksforGeekshttps://www.geeksforgeeks.org/enum-classes-in-c-and-their-advantage-over-enum-datatype/ Enums or Enumerated type (enumeration)is a user-defined data type that can be assigned..

maxzcl的博客 502

C++惯用法之enum class

,其中EnumName表示枚举类型的名称,UnderlyingType表示底层类型,可以是整数类型或者枚举类本身。这样可以避免传递错误的参数导致的错误,提高代码的可靠性。enum class是C++中定义枚举类型的一种惯用法,它提供了更强的类型安全性和作用域限制。其中,EnumName表示枚举类型的名称,UnderlyingType表示底层类型,可以是整数类型(如int、unsigned int等)或者枚举类本身。在使用enum class时,编译器会进行类型检查,确保传递的参数是正确的枚举类型。

SVIPCODE的博客 1211

【Cpp】C++的enum

一、继承C语言的enum C++中的枚举是直接从C语言中继承过来的,在这过程中,也做了改进。如C语言中定义一个枚举类型的变量必须加上enum enum QuarterFirst{JAN, FEB, MAR};//定义类型QuarterFirst enum QuarterFirst quarter1 = JAN;//定义QuarterFirst类型的变量quarter1 这在定义变...

baymaxly的博客 1754

ABAP代码使用OAuth2.0 Client Credential调用外部API

ABAP-OAuth2.0-调用外部API

m0_74015269的博客 1951

S32K3的STCU2模块详解:从硬件FSM到MCAL配置,搞懂BIST在线测试全流程

本文深入解析S32K3系列MCU的STCU2模块,从硬件FSM架构到MCAL配置,详细讲解BIST在线测试全流程。通过分区的安全策略和实战代码示例,帮助开发者掌握汽车电子系统中的功能安全实现,提升系统可靠性和安全性。

weixin_42525328的博客 444

C++11的enum class & enum struct和enum

C++标准文档——n2347(学习笔记) 链接:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf旧版enum存在的问题 1 问题1向整形的隐式转换 2 问题2无法指定底层所使用的数据类型 3 问题3enum的作用域 4 不同编译器解决该问题的方法不统一 enum class 和 enum struct 1 enum

Sei的博客 1万+

Diffusion:如何从噪声中生成清晰图像

扩散模型是当前AI图像生成领域的核心基础,如Stable Diffusion、DALL·E等热门模型均采用该技术。其原理分为训练和推理两个阶段:训练时通过逐步加噪图片,让AI学习如何去除噪声;推理时则从随机噪声出发,结合文本提示逐步去噪生成清晰图像。模型架构通常包含文本编码器、生成模型(如U-Net)和解码器三部分,通过多轮迭代将低维潜在空间表示转化为最终图像。这种技术模拟了艺术家从混沌中雕琢作品的过程,实现了从随机噪声到目标图像的智能生成。

laumy的学习笔记 1273

【C++】C++11的enum class & enum struct和enum

1、问题描述 在走读QtCreator中看到一段代码 在QtCreator-v4.9.2源码中 src\plugins\projectexplorer\projectnodes.h enum class NodeType : quint16 { File = 1, Folder, VirtualFolder, Project }; 以前一直使用enum,这里使用的...

郭老二 1346

DVWA靶场实战:手把手教你绕过文件上传限制,用蚁剑连接一句话木马

本文详细介绍了在DVWA靶场中如何绕过文件上传限制并利用蚁剑连接一句话木马的实战技巧。通过分析文件上传漏洞原理、创建一句话木马、使用Burp Suite拦截修改请求以及配置蚁剑连接WebShell的全过程,帮助安全研究人员深入理解Web安全防护与攻击技术。

weixin_30335575的博客 90

PICO G2 4K Unity开发环境配置完全指南

VR开发中,Android平台的硬件适配与Unity版本兼容性是基础性技术命题。PICO G2 4K作为基于骁龙845+Android 8.1的专用VR一体机,其开发链路高度依赖特定Unity LTS版本(2020.3.41f1)、NDK r21e及OpenJDK 11等工具链组合,本质是嵌入式Android VR Runtime与Unity IL2CPP ABI的深度对齐问题。该配置方案不仅解决ADB识别、APK签名、Logcat捕获等工程痛点,更支撑手柄6DoF追踪、射线交互、Haptic反馈等核心XR

weixin_30298497的博客 616

【转】C++11的enum class & enum struct和enum

转自:https://blog.youkuaiyun.com/sanoseiichirou/article/details/50180533 C++标准文档——n2347(学习笔记) 链接:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf 旧版enum存在的问题 1 问题1向整形的隐式转换 2 问题2无法...

weixin_34413802的博客 96

【OpenClaw企业级智能体实战】第04篇:OpenClaw成本优化实战——Token消耗降96%!claude-mem+OpenViking从入门到精通

OpenClaw作为企业级智能体框架,凭借强大的自动化能力成为企业数字化转型的热门工具,但原生机制导致的上下文冗余问题,让众多用户面临“Token消耗失控”的困境——单周账单数千元的案例屡见不鲜。本文基于阿里云实测数据与开源工具官方文档,先深度拆解OpenClaw成本黑洞的核心成因(记忆碎片化、Token指数级膨胀),再系统讲解两款核心优化工具(claude-mem单Agent记忆管理、OpenViking多Agent集群底座)的底层原理、算法架构与实现逻辑,提供从环境搭建、工具集成、参数调优到安全部署

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 702

[转]C++11的enum class & enum struct和enum

1. 旧版enum存在的问题 问题描述 1 向整形的隐式转换(Implicit conversion to an integer) 2 无法指定底层所使用的数据类型(Inability to specify underlying type) 3 enum的作用域(Scope) 4 不同编译器解决该问题的方法不统一 1....

weixin_33788244的博客 176

【Python计量】linearmodels面板数据回归(一)

我们以伍德里奇《计量经济学导论现代方法》的”第14章高级面板数据方法“的案例14.1为例,使用jtrain中的数据来进行固定效应估计。

mfsdmlove的博客 9275

仿真学习系列(四十二):Sigrity仿真之走线阻抗和耦合检查

在高速电路设计中,走线的阻抗和信号线之间的耦合是影响信号完整性的重要因素。设计中可能会出现多种情况,导致阻抗变化或不匹配,例如线宽的变化、跨层分割等。传统的人工检查方法常常不够高效且易忽视细节。借助仿真软件,可以快速定位问题区域,并进行精确分析,从而有效避免或减少信号反射和串扰带来的影响。

案例文章,高速信号 423

C++ enum class实现& | ^ ~等操作

【代码】C++ enum class实现& | ^ ~等操作。

DefiniteGoal的博客 329

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++ 中 enum 与 enum class 的深度对比

C++ 中 enum 与 enum class 的深度对比

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 1341

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C++ enum与enum class的使用区别

在C++中 enum作为普通枚举 而enum作为作用域枚举 其中的区别有五大方面 如下。

2401_87909443的博客 718

C/C++ enum class(C++11),enum枚举

枚举是c++的一种机制,用来列出某种有穷集合。在C++11中新增了enum class(同enum struct),那它跟enum有何不同呢? enum的特点 enum的成员初始化,如果已被指定就按指定值初始化。如果没有被指定,那么就是上一个成员值加1,第一个成员没有指定则为0。 向整形的隐式转换。 作用域的问题,如果已经有一个枚举类中的成员名称被占用,那么它无法再被定义。 不清楚底层类型,这个...

LU_ZHAO的博客 1938

C++中的Enum与Enum class

大家都知道在C++中有两种声明Enum的方式,分别是enum和enum class。enum在古老的C++98里面就存在,而enum class从C++11开始进入大家视野,那它们之间有什么不同的地方吗,为什么要新加一个enum class?一般来说它们在三个方面有区别,今天就让我们来看看吧。 它们声明的枚举变量所影响的范围不同 enmu class 又被叫做scoped enum。顾名思义,enum class中声明的枚举值不会造成变量污染,举个例子 enum enumFruit { APPL

君子务本 2839
上一篇: ubuntu opencv 安装
下一篇: leetcode 1584. Min Cost to Connect All Points(连接所有点的最小开销)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值