做淘宝网站如何提取中间的提成,html登录页面制作,php空间租用,黑龙江建设网官网手机版C初学者指南第一步—6.枚举和枚举类 文章目录 C初学者指南第一步---6.枚举和枚举类1.作用域的枚举(enum class类型#xff09;#xff08;C11#xff09;2.无作用域的枚举(enum类型)3.枚举类的基础类型4.自定义枚举类映射5.和基础类型的互相转换 1.作用域的枚举(enum class类…C初学者指南第一步—6.枚举和枚举类 文章目录 C初学者指南第一步---6.枚举和枚举类1.作用域的枚举(enum class类型C112.无作用域的枚举(enum类型)3.枚举类的基础类型4.自定义枚举类映射5.和基础类型的互相转换 1.作用域的枚举(enum class类型C11
语法
enum class name { enumerator1, enumerator2, … enumeratorN };默认值每个枚举类映射到从 0 到 N-1 的整数
enum class day { mon, tue, wed, thu, fri, sat, sun };
day d day::mon;
d day::tue; // OK
d wed; // Err! 编译错误: wed 只能在day作用域内仅限于命名范围的枚举类无法像某些其他语言那样查询枚举的属性
2.无作用域的枚举(enum类型)
语法
enum name { enumerator1, enumerator2, … enumeratorN };注意缺少关键字“class”。
enum day { mon, tue, wed, thu, fri, sat, sun };
day d mon; // OK!, 枚举值 mon 没有作用域
int i wed; // OK!, i 2
enum stars { sun, … }; // Err! 编译错误名称冲突不局限于作用域的枚举⇒名称冲突危险的隐式转换为基础类型无法像某些其他语言那样查询枚举的属性
注意一下enum class和enum类型的区别enum枚举类型从C语言开始就有了C中也继承了这一类型那为什么还要增加enum class呢主要有以下几个原因
类型安全性: enum class 是一种强类型枚举(strongly typed enum)。它拥有更好的类型安全性,因为它的枚举值是被限定在枚举类型内部的。 传统的 enum 是一种弱类型枚举(weakly typed enum)。它的枚举值可以隐式地转换为整型,容易造成意外的转换和错误。命名空间: enum class 的枚举值是限定在该枚举类型的命名空间中的。要访问枚举值需要使用 EnumName::ValueName 的形式。 enum 的枚举值直接存在于全局命名空间中,可以直接使用 ValueName 的形式访问。默认基础类型: enum class 的默认基础类型是 int。但可以使用 enum class EnumName : underlying_type; 的形式指定其他整数类型作为基础类型。 enum 的默认基础类型也是 int,但不能直接指定其他基础类型。作用域: enum class 的作用域仅限于该枚举类型本身。 enum 的作用域会污染全局命名空间。
注意避免使用无限定作用域的枚举
3.枚举类的基础类型
必须是整数类型char、short、long、…默认是int型
// 7个值 ⇒ char类型应该足够了
enum class day : char {mon, tue, wed, thu, fri, sat, sun
};
// 不超过10,000 ⇒ short类型应该足够了
enum class language_ISO639 : short {abk, aar, afr, aka, amh, ara, arg, …
};4.自定义枚举类映射
可以显式设置枚举类值不需要以 0 开头某些值可以省略可以是部分的只有一些具有枚举值的枚举器
注意如果显式设置枚举类的枚举值请对所有枚举类的枚举执行此操作
enum class month {jan 1, feb 2, mar 3, apr 4, may 5, jun 6, jul 7, aug 8, sep 9, oct 10, nov 11, dec 12
};
enum class flag {A 2, B 8, C 5, D, E, F 25
};5.和基础类型的互相转换
enum class month {jan 1, feb 2, mar 3, apr 4, may 5, jun 6, jul 7, aug 8, sep 9, oct 10, nov 11, dec 12
};枚举 → 整数整数→枚举int i static_cast(month::mar); // i: 3int i 0;cin i;// 确定 i ≥ 1 and ≤ 12 …month m1 static_cast(i);
附上原文链接 如果文章对您有用请随手点个赞谢谢 ^_^ 不来张图片就文章标题就很丑