1.定義:一種新類型且屬于字面值常量類型:将一組 整形常量 組織在一起。
2.限定作用域枚舉類型定義:enum class(struct) classname
enum class open_modes{inptu,output,append};
3.不限定作用域枚舉類型定義:enum class(struct) 或enum
enum color{red,yello,gree}; //不限定作用域
enum {floatP,doubleP} typeP,typeP2; //未命名的不限制作用域,隻能在定義enum時定義它的對象,以逗号分隔的聲明清單,這裡是typeP,typeP2。
4.限定作用域枚舉成員的作用域規則:遵循正常作用域規則,并且在枚舉類型的作用域外是不可通路的。與之相反,不限定作用域的枚舉成員的作用域與枚舉本身的作用域相同。
enum color{red,yellow,green}; //不限定作用域枚舉類型
enum stoplight{red,yellow,green}; //錯誤,重複定義枚舉成員
enum class peppers{red,yellow,green};//正确,限定作用域的成員隐藏了不限定作用域的枚舉成員
color eyes=green; //能正确通路
peppers p=green; //所在作用域沒有green
peppers::red; //用 :: 通路枚舉成員
5.枚舉成員值:預設情況從0開始,一次加1,也可以為一個或幾個枚舉成員指定專門的值
enum class intType{charType=,intType=};
//枚舉值不一定唯一,如果沒有顯示提供初始值,則目前枚舉成員的值等于之前枚舉成員的值加1
6.枚舉用途:枚舉成員是const的,是以初始化枚舉成員的初始值必須是常量表達式,是以枚舉成員本身也是一條常量表達式。
constexpr intType charbits=intType::charType;
//enum可以作為switch語句的表達式,枚舉值可以用在case的标簽。
//可以将枚舉類型作為一個非類型模闆參數形參使用
//在類的定義中初始化枚舉類型的靜态成員
7.枚舉類型對象的初始和指派:必須用該類型的枚舉成員或者改類型的另一個對象。
enum color{red,yellow};
color eyes=color::red;
color nodes=eyes;
8.枚舉大小:
①:一個不限定作用域的枚舉類型對象或枚舉成員自動轉化成整形
②預設情況下:限定作用域的枚舉成員是int。對于不限定作用域的枚舉成員不存在預設類型,但肯定能容納最大枚舉成員值。
③指定枚舉大小:
enum intValues:unsigned long long{charType=,intType=};
//每個成員的類型都是unsigned long long 類型
9.枚舉類型的前置聲明:必須指定其成員的大小,并且enum的聲明和定義必須比對
enum intValue:unsigned long long; //不限定的必須指定成員類型
enum class open_modes; //限定的預設是int
10.形參比對和枚舉類型:隻要記住:枚舉類型對象的初始化或指派規則就行了。但是可以将一個不限定作用域的枚舉類型對象或枚舉成員傳給整形形參(因為是初始化整形而不是枚舉類型)