c++ enum 给定类型_C++11作用域内枚举enum
在C++11之前的枚舉(enum),是沒有辦法兩個枚舉(enum)內(nèi)有相同枚舉名的。如果還不知道C++中枚舉(enum)是什么,可以看這篇:枚舉enum
如:蘋果和桔子都有大,中,小。寫個代碼來說明下:
兩枚舉類型中相同枚舉值
C++
1
2
enumapple{big,medium,small,special};
enumorange{big,medium,small};
以上代碼編譯不會通過的,因為apple和orange在同一個作用域內(nèi)。之前我們可能會改成用size來做枚舉,但apple枚舉又多了一個枚舉值,這樣在C++11之前版本中就不會很好處理。
哪C++11是如何處理這類問題?
C++11提供一種新枚舉(enum),其枚舉量的作用域為類。
具體聲明如下:
C++11作用域內(nèi)枚舉
C++
1
2
enumclassapple{big,medium,small,special};
enumclassorange{big,medium,small};
聲明中的class關(guān)鍵字,也可以用struct。
C++11作用域內(nèi)枚舉struct
C++
1
2
enumstructapple{big,medium,small,special};
enumstructorange{big,medium,small};
這樣枚舉的作用域為類后,不同枚舉(enum)定義中的枚舉量就不會有名稱沖突。
如何使用作用域內(nèi)枚舉?
使用枚舉名來限定枚舉量,這樣編譯器才會明白用哪個的枚舉量。
使用C++11作用域內(nèi)枚舉量
C++
1
2
applea1=apple::big;
orangeo1=orange::big;
C++11作用域內(nèi)枚舉不能默認隱式轉(zhuǎn)換成int
C++
1
2
3
4
5
6
7
//C++ 98
inti=a1;//正確
//C++ 11
intj=o1;//錯誤
intk=int(o1);//顯示類型轉(zhuǎn)換
上面代碼可以看出C++11代碼會更加安全,如一定要轉(zhuǎn)換,必需顯示類型轉(zhuǎn)換。
為什么不能直接轉(zhuǎn)換具體原因?
C++98中,枚舉類的具體值類型是什么,可能隨系統(tǒng)而異,沒有硬規(guī)定。但一般都會是int類型。
C++11中,枚舉類的具體值類型不在依賴系統(tǒng),可以自己定義。如不指定,默認C++11作用域內(nèi)枚舉的值類型是int。
如何指定C++11作用域內(nèi)枚舉的值類型?
指定枚舉值類型定義語法:
C++11指定枚舉值類型定義
C++
1
2
enumclass:shortapple{big,medium,small,special};//值類型為short
enumclass:intorange{big,medium,small};/值類型為int
相關(guān)文章:自定義類型枚舉enum枚舉enum沒有新定義類型,結(jié)構(gòu)是一個新類型這點可以從它們的定義看到,枚舉的每個值沒有類型,只有名字,結(jié)束用“,”結(jié)構(gòu)類的成員都有自己的類型,有變量名,結(jié)束用“;”。其時枚舉enum是整型變量,枚舉enum的定義意義,就是以Arrow類型為例,它的取值只有4個,主要還是為了編程時方便管理,方便閱讀,方便理解程序。運用有非常多,如顏色枚舉、季節(jié)枚舉、月份枚舉、星期枚舉等等。...
C++11語言auto關(guān)鍵字作用C++11中對關(guān)鍵字auto進行了重新定義,可以讓編譯器根據(jù)初始值類型自動推斷變量的類型。auto a? = 0;? ?//推斷出a類型為int atuo b = 0.0; ?//推斷出b類型doublu auto c = 'A'; ?//推斷出c類型是char如果不知道為什么能自動推斷出來可以看下:常量類型? ? ?和? ?C++常量類型?獲取上面寫的都是推斷基本類型,當然C++11 auto關(guān)鍵字并非只樣簡單的運用,更多的是為了自定義類型推斷。相信很多人在寫迭代器時會很頭痛,太長了。先個vector類型的迭代器。...
C++11新增數(shù)組初始化方式C++11之前數(shù)組使用方法可以參考這篇:數(shù)組使用注意點今天這篇主要講C++11數(shù)組新增加初始化方式。 1.C++11數(shù)組初始化時可省略等號 2.C++11數(shù)組初始化時大括號內(nèi)可以不包含任何東西 3.C++11數(shù)組初始化時不能縮窄轉(zhuǎn)換。縮窄轉(zhuǎn)換:就是寬類型轉(zhuǎn)窄類型,例如double轉(zhuǎn)int ...
C++11字符串新增初始化方式C++11除了支持之前版本的初始化方式外,還支持列表初始化方式。列表初始化可以看上篇:C++11新增數(shù)組初始化方式下面寫個新增初始化方式和之前賦值方式比較:...
C++都支持哪些作用域C++語言作用域符號是兩個冒號:: ,相信大家不陌生,在看代碼是一定會有很多地方有這::符號。作用域,如果不理解是什么,可以先理解成起作用的范圍。書上都是寫作用域,這樣比較書面話,如寫成作用范圍就不哪么好聽。C++語言支持3種作用域: 1.局部作用域(local scope) 2.名字空間作用域(namespace scope)?? 3.類作用域(class scope) ...
C++11新增模板類array原因vector類的功能比數(shù)組強大,但效率沒有數(shù)組高(vector對象分配在自由存儲區(qū)或堆中)。效率來講內(nèi)置數(shù)組是最高的,但是會不安全不方便,如下標越界、兩個數(shù)組賦值要用for循環(huán)一個個賦值。以上兩點,C++11中就新增了array類模板,來解決內(nèi)置數(shù)組不安全不方便,相比vector提高效率(array對象分配在棧中)。...
C++11新增基于范圍的for循環(huán)之前在用for循環(huán)時,每次都要寫條件,并不是很方法。double a[5] = {1,2,3,4,5}; for(int i=0;i...
C++11關(guān)鍵字decltype用途關(guān)鍵字decltype將變量的類型聲明為表達式指定的類型。下面的語句的含義是,讓y的類型與x相同,其中x是一個表達式。decltype (x) y;decltype的工作原理比auto復雜,可以指定類型為引用和const。...
C++11新增關(guān)鍵字nullptrnullptr關(guān)鍵字就是表示空指針的意思,C++11之前空指針都是NULL。已經(jīng)有了NULL哪為什么還要有nullptr關(guān)鍵字? nullptr表示空指針,不能轉(zhuǎn)換為整型類型。為了向后兼容,C++11仍允許用0(NULL)來表示空指針。建議使用nullptr而不是0(NULL),因為更高的類型安全。...
C++11兩個尖括號中間可以不用加空格在之前寫C++代碼時,比如聲明嵌套模板(vector里面存的還是vector),這時就會有兩個尖括號出現(xiàn)。就會與運算符>>搞混,C++要求在聲明嵌套模板時使用空格將尖括號分開。...
總結(jié)
以上是生活随笔為你收集整理的c++ enum 给定类型_C++11作用域内枚举enum的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PPT设计里的小技巧
- 下一篇: 建表mysql语句吗_mysql建表语句