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

C++之C++11引入enum class与传统enum关键字总结(二百五十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:理解C++之lambda匿名函数、typedef、using等用法

2.C++11的enum class与传统的enum关键字介绍

  • C++11引入的enum class关键字来定义枚举
  • 传统的enum关键字定义枚举
  1. 作用范围:enum class创建了一个作用域限定的枚举类型,而enum则创建了一个隐式的全局作用域枚举类型。这意味着使用enum class定义的枚举成员在枚举之外是不可见的,需要通过作用域解析运算符(::)来访问。

  2. 默认类型安全性:enum class提供了更严格的类型安全性,不允许隐式的整数转换。它们不能与整数类型进行直接比较或赋值操作,必须使用显式的类型转换。

  3. 枚举成员的作用域:在enum class中定义的枚举成员在枚举之外是不可见的,因此可以使用相同名称的枚举成员在不同的枚举中进行定义。

总结:enum class提供了更严格的类型安全性和作用域隔离的特性,能够避免命名冲突和隐式类型转换的问题。而传统的enum关键字则更为灵活,但类型安全性、作用域限定方面相对较弱。

3.代码实例

1.传统enum枚举例子

v1.0
#include <iostream>

enum Color {
   RED,
   GREEN,
   BLUE
};

int main() {
   Color c = GREEN;
   
   if(c == RED) {
      std::cout << "颜色是红色" << std::endl;
   } else if(c == GREEN) {
      std::cout << "颜色是绿色" << std::endl;
   } else if(c == BLUE) {
      std::cout << "颜色是蓝色" << std::endl;
   }
   
   return 0;
}
v2.0
#include <iostream>

enum Descriptor : int32_t {
  Invalid = 0,
  NUM01 = 1
};

int main(){
  //1.将enum class Descriptor枚举类型转换成int32_t类型
  Descriptor descriptor = Descriptor::NUM01;
  int32_t value = static_cast<int32_t>(descriptor);
  printf("value = %d\n",value);

  //2.将int32_t类型转换成enum class Descriptor枚举类型类型
  int number = 23;
  Descriptor desc1 = static_cast<Descriptor>(number);
  printf("number = %d\n",number);  
}

2.C++11引入enum class枚举例子

v1.0
#include <iostream>

enum class Color {
   RED,
   GREEN,
   BLUE
};

int main() {
   Color c = Color::GREEN;
   
   if(c == Color::RED) {
      std::cout << "颜色是红色" << std::endl;
   } else if(c == Color::GREEN) {
      std::cout << "颜色是绿色" << std::endl;
   } else if(c == Color::BLUE) {
      std::cout << "颜色是蓝色" << std::endl;
   }
   
   return 0;
}
v2.0
#include <iostream>

enum class Descriptor : int32_t {
  Invalid = 0,
  NUM01 = 1
};

int main(){
  //1.将enum class Descriptor枚举类型转换成int32_t类型
  Descriptor descriptor = Descriptor::NUM01;
  int32_t value = static_cast<int32_t>(descriptor);
  printf("value = %d\n",value);

  //2.将int32_t类型转换成enum class Descriptor枚举类型类型
  int number = 23;
  Descriptor desc1 = static_cast<Descriptor>(number);
  printf("number = %d\n",number);  
}


http://www.kler.cn/a/108574.html

相关文章:

  • uni-app之数据驱动的picker选择器( uni-data-picker)之可以选择到任意级别
  • SQL 注入详解:原理、危害与防范措施
  • 【OpenEuler】配置虚拟ip
  • 传奇996_19——常用函数
  • python怎么设置环境变量
  • Redo与Undo的区别:数据库事务的恢复与撤销机制
  • 如何通过adb控制安卓手机wifi
  • 手机apn介绍
  • 66 内网安全-域横向批量atschtasksimpacket
  • PostgreSQL InvalidMessage Cache 同步机制
  • 如何确保PCIe Gen3通道的信号质量
  • SpringBoot2.7.14整合redis7
  • 【Java】HashMap集合
  • CommunityToolkit.Mvvm 加速 MVVM 开发
  • 环形链表-力扣
  • 【影刀演示_发送邮件的格式化HTML留存】
  • 【MATLAB源码-第61期】基于蜣螂优化算法(DBO)的无人机栅格地图路径规划,输出最短路径和适应度曲线。
  • 玩转视图变量,轻松实现动态可视化数据分析
  • 深度神经网络的数学原理:基于超平面、半空间与线性区域的表示
  • stm32通过AT指令与esp8622通信
  • JVM——GC垃圾回收器
  • 06 MIT线性代数-线性无关,基和维数Independence, basis, and dimension
  • SpreadJS 16.2.2 + GcExcel 6.2.3 相结合,还有更强的吗
  • Android WMS——WM窗口管理(八)
  • 小程序request请求封装
  • 使用 @antfu/eslint-config 配置 eslint (包含兼容uniapp方法)