自助建站系统源码 资源网,吉祥又聚财的公司名字,宁波妇科,意大利新闻简介#xff1a; CSDN博客专家#xff0c;专注Android/Linux系统#xff0c;分享多mic语音方案、音视频、编解码等技术#xff0c;与大家一起成长#xff01; 优质专栏#xff1a;Audio工程师进阶系列【原创干货持续更新中……】#x1f680; 人生格言#xff1a; 人生… 简介 CSDN博客专家专注Android/Linux系统分享多mic语音方案、音视频、编解码等技术与大家一起成长 优质专栏Audio工程师进阶系列【原创干货持续更新中……】 人生格言 人生从来没有捷径只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注Android系统攻城狮 1.前言 本篇目的理解C之lambda匿名函数、typedef、using等用法 2.C11的enum class与传统的enum关键字介绍
C11引入的enum class关键字来定义枚举传统的enum关键字定义枚举 作用范围enum class创建了一个作用域限定的枚举类型而enum则创建了一个隐式的全局作用域枚举类型。这意味着使用enum class定义的枚举成员在枚举之外是不可见的需要通过作用域解析运算符::来访问。 默认类型安全性enum class提供了更严格的类型安全性不允许隐式的整数转换。它们不能与整数类型进行直接比较或赋值操作必须使用显式的类型转换。 枚举成员的作用域在enum class中定义的枚举成员在枚举之外是不可见的因此可以使用相同名称的枚举成员在不同的枚举中进行定义。
总结enum class提供了更严格的类型安全性和作用域隔离的特性能够避免命名冲突和隐式类型转换的问题。而传统的enum关键字则更为灵活但类型安全性、作用域限定方面相对较弱。
3.代码实例
1.传统enum枚举例子
v1.0
#include iostreamenum 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 iostreamenum Descriptor : int32_t {Invalid 0,NUM01 1
};int main(){//1.将enum class Descriptor枚举类型转换成int32_t类型Descriptor descriptor Descriptor::NUM01;int32_t value static_castint32_t(descriptor);printf(value %d\n,value);//2.将int32_t类型转换成enum class Descriptor枚举类型类型int number 23;Descriptor desc1 static_castDescriptor(number);printf(number %d\n,number);
}
2.C11引入enum class枚举例子
v1.0
#include iostreamenum 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 iostreamenum class Descriptor : int32_t {Invalid 0,NUM01 1
};int main(){//1.将enum class Descriptor枚举类型转换成int32_t类型Descriptor descriptor Descriptor::NUM01;int32_t value static_castint32_t(descriptor);printf(value %d\n,value);//2.将int32_t类型转换成enum class Descriptor枚举类型类型int number 23;Descriptor desc1 static_castDescriptor(number);printf(number %d\n,number);
}