C++17 std::enum
最编程
2024-03-29 08:14:27
...
enum 2020/3/26
1.普通枚举
1.1.定义:是一个被命名的整型常数的集合
1.2.格式:enum 类型名{ 标识符[=整形常量],... }变量名; //对应int(0-n);仅仅定义时可赋值
1.3.说明:
1)如无初始化从第一个标识符开始, 顺次赋给标识符0, 1, 2, ...
2)当枚举中某成员赋值后, 其后成员按依次加1规则确定其值
3)枚举变量只能取枚举说明结构中的某个标识符常量
4)枚举列表中标识符作用范围是全局,不能再定义与它们名字相同的变量
5) Mon都是常量,不能对它们赋值
1.4.运用:
enum Color {Red,Yellow,Green};
Color x1=Red;//用x1或Red
cout << x1 << Green << endl;
2.强枚举
2.1.定义:enum class Number : unsigned int { X1 = 1, X2 = 2 };
2.2.运用:Number n1 = Number::X2;
cout << int(n1) << int(Number::X2) << endl;//必须这样Number::X2引用
2.3.比较:n1==Number::X2;
=====================================================================================
3.实例1:
enum Color { Red, Yellow, Green };//普通枚举
enum class People { Girl, Boy }; //强枚举
enum class Number : unsigned int { X1 = 1, X2 = 2 };
int main(){
Color x1 = Green; //用x1或Red
cout << x1 << endl; //2
cout << Green << endl; //2
People p1 = People::Boy;
cout << int(p1) << endl; //1
cout << int(People::Boy) << endl; //1
Number n1 = Number::X2;
cout << int(n1) << endl;//2
cout << int(Number::X2) << endl; //2
switch (n1) {
case Number::X1: puts("x1");
break;
case Number::X2: puts("x2");
break; //x2
}
//枚举[类]对象的构造赋值
enum Enum0 { Red, Green };
//Enum0 m{1}; //错误:不能用int右值初始化MyEnum类型对象
enum class Enum1 { Red, Green };
enum Enum2 :unsigned char {};
Enum2 b1{ 42 };
//Enum2 b2 = { 2 }; //错误:不能用int右值初始化Enum2类型对象
Enum2 b3 = Enum2{ 2 };
//Enum2 b4{-1}; //错误:常量表达式-1不能缩小范围为Enum2类型
enum class Enum3 :unsigned int { value = 0 };
Enum3 h{ 42 };
struct StructType { Enum2 b; };
//StructType a1 = { { 2 } }; //错误:不能用int右值初始化Enum2类型对象
StructType a2 = { Enum2{ 2 } };
StructType a3{ Enum2{2} };
void fun(Enum2);
//fun({ 42 }); //错误:无类型说明符
}
实例2:
enum Color { Red = 1, Yellow, Green }; //定义枚举类型
enum Color { Red, Yellow, Green }color; //Red, Yellow, Green=0, 1, 2
enum { Red, Yellow = 4, Green, Black }color; //Red, Yellow , Green, Black=0,4,5,6
示例3: //用for 来遍历枚举的元素
enum DAY {MON=1,TUE,WED,THU,FRI,SAT,SUN } day; //若枚举类型不连续则无法遍历
for (day = MON; day <= SUN; day++)
printf(" %d \n", day); // 1 2 3 4 5 6 7
=======================================================================================
上一篇: VMware17 创建虚拟机的完整流程
推荐阅读
-
C++ | STL | std::priority_queue | 大顶堆与小顶堆实现
-
C/C++ | STL | std::priority_queue for Max and Min Heap
-
C++如何使用std::chrono获取实时时间
-
std::unordered_map
-
[C++]简明讲解std::sort函数的用法与总结
-
在 C++ STL 中理解与运用 std::sort 函数
-
询问在C++中如何对数组运用std::sort进行排序的操作步骤
-
玩转 TypeScript:理解 Enum 枚举与泛型的实用应用
-
在C++中,找不到将 "std::string" 转换为 "LPCWSTR" 的合适转换方法
-
打造一个线程安全的C++11队列,利用std::queue与std::mutex