十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

C++11新增强类型枚举——enum class

C++11新增强类型枚举——enum class 文章目录c11新特性——enum class强类型枚举1 enum类型的缺陷2 enum class类型3 为枚举类型指定底层类型c11新特性——enum class强类型枚举c11 引入了enum class强类型枚举用来替代enum弱类型枚举。1 enum类型的缺陷传统enum的一些缺陷比如容易造成命名冲突、存在隐式转换等问题enum Fruit { ORANGE, APPLE, TOMATO }; // 普通的 enum 类型没有命名空间隔离 enum Vegetable { CABBAGE, RADISH, //TOMATO // 编译报错同一作用域内同名的枚举会产生冲突 }; int i 50 CABBAGE; // 与不同类型的数据存在隐式转换2 enum class类型enum class强类型枚举的形式// 定义强类型枚举 enum class 枚举名 : 底层类型(可选) { 枚举值1, 枚举值2, // ... };使用enum class强类型枚举具有强作用域、强类型、可指定底层数据类型的特点可以有效解决enum弱类型枚举使用中产生的各种问题为保证不重名和类型安全enum class划分了作用域不同作用域内的同名枚举不会产生冲突且 c11 要求enum class强类型枚举在使用上必须用枚举名::值的方式访问enum class不会进行自动隐式转换避免意外操作。enum class Fruit { ORANGE, APPLE, TOMATO }; // enum class 类型存在命名空间隔离 enum class Vegetable { CABBAGE, RADISH, TOMATO // 正确在不同一作用域内同名的枚举不冲突 }; auto type Vegetable::RADISH; // 使用“枚举名::值”访问 //int i 50 Vegetable::RADISH; // 编译报错enum class 不会进行自动隐式转换3 为枚举类型指定底层类型enum枚举类型的底层类型不固定依赖于编译器可能是int/char/short中的一种c11 中新增了为enum指定底层类型的方式enum Status : int { // 指定 int 为 Status 的底层类型 OK, ERROR };新引入的enum class也可以指定底层类型若未手动指定则enum class的默认底层类型固定为int// 等价于 enum class Status enum class Status : int{ OK, ERROR };
返回列表