欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

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
=======================================================================================