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