亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

深入理解C++枚舉類型enum

2019-11-08 03:11:50
字體:
來源:轉載
供稿:網友

目錄(?)[+]

為啥需要枚舉類型枚舉類型的內存分配問題關于常量的誤解不需要分配內存的情況需要分配內存的情況枚舉類型具體用法

為啥需要枚舉類型

編程語言中的所有特性都是為了滿足某種需求,達到某個目的還出現.不會莫名其妙的出現在那.

枚舉可以用來保存一組屬性的值.enum的全稱是enumeration意思是列舉

看著這句話可能覺得太書面化了,不夠通俗易懂.那舉些通俗的例子說說.日常生活中我們特喜歡分類,比如讀書時分啥數,理,化.當官的級別有啥省長,市長,縣長.軍隊有軍長,師長,團長.這樣一組組的屬性值就最適合用枚舉類型來表示.當用一個軟件時,有些頁面會有很多單選按鈕(radio button),這也特別適合用枚舉來表示你舉了哪一個.

 

光這樣說你可能還不能體現枚舉的好處.如果沒枚舉,表示一些組屬性的值你只能用一組數字,或者一組字符串.

數字從字面上看不出任意意義,可讀性非常差,所以很少用.那就假如要你通過比較字符串來做很多種類判斷,比如 if(HisTitle == “stadholder”)   else if(HistTile == “mayor”) .如果讓你敲個幾十次你就知道是件多麻煩痛苦的事了,很多單詞如果敲錯一個意思就完全變了,這樣出現bug了也不容易找到.老是復制粘貼也較麻煩.所以字符串是編輯麻煩,容易出錯.如果要使用枚舉就極大的方便我們敲代碼,集成開發工具中的智能感應會給你提示,敲個點號就帶出來了.而且枚舉會做類型檢查,不會像字符串那樣只能靠你自己去對比.

 

枚舉類型的內存分配問題

 

上面我們講了如果沒有枚舉,一般會想到用數字或字符串表示某個類別.這樣使用肯定不方便.也許你可能會想到用宏來表示.比如#define 市長 “mayor” 或者#define 市長 2

這自然是一個方法,但一來嘛在C++中是不太推薦用宏的,盡量少用.因為C++是強類型的語言,希望通過類型檢查來降低程序中的很多錯誤,而宏只是在編譯期前做簡單替換,繞過了類型檢查,失去了強類型系統的優勢支撐. 二來嘛一組屬性值都是相關聯的信息,必須放到一起,放到一組.

 

關于常量的誤解

枚舉類型成員是常量

這句話怎么理解呢.也就是說enum  MyEnum{ one = 1 , two , three} ;

與 const int one = 1;  const int two = 2; const int three = 3; 差不多是一樣的.

 

說到常量其實有個非常誤導人的地方因為用宏#define 可以定義的我們說是常量,這里只涉及到簡單的替換自然不可能存在內存分配問題.但是用const定義的也叫常量,而const定義常量貌似跟定義一般的變量只多個const關鍵字. 你可能會想當然認為常量都只是簡單替換,所以不存在內存分配.那按這個邏輯,豈不是const定義的常量,枚舉類型都沒有內存分配?

實際上大部分時候確實是這樣的.但并非總是如此,有些情況會需要分配內存的.

 

1.不需要分配內存的情況

如果定義常量const int one = 1;然后在其他地方只是把one作為右值賦值給其他變量那就不存在內存分配.但這里的常量跟#define定義的常量不同,宏定義的常量是編譯前簡單替換掉,而不需要做類型檢查.而const定義的常量在編譯時會幫類型檢查,編譯完之后再做替換.所以編譯完之后就看不到const的信息了,轉換成對應的值.const定義的信息只是保存在符號表中.

那同樣,如果只是enum MyEnum{ one = 1 , two , three} ;這樣定義一個枚舉類型,然后也是簡單的作右值賦值給其他變量.比如int num = MyEnum::one;那也只是保存信息在符號表中,編譯后被替換掉了.

有人可能說如果用sizeof MyEnum測下會發現會是4(這是VS里面,不同的編譯器可能不一樣)于是認為不管是枚舉里面有多少個元素內存分配都是4.實際上不是這意思,應該是定義一個MyEnum類型的枚舉變量時會分配內存.這跟定義了一個類一樣,你用sizeof去測一個為也會看到大小,但我們知道只有當類實例化之后才實際分配內存的.

 

2.需要分配內存的情況

1.)const int one;是類的成員變量 2. )extern const int one = 123;    3.)const int one = 1;    int* pConst = &one;

上面三種情況會需要分配內存.

而枚舉類型,如果不是簡單的去給其他變量賦值,而是去定義一個枚舉類型變量.

比如MyEnum grade = MyEnum::one; //此時會分配4字節內存空間.(不過據說編譯器會做優化,如果枚舉類型所有值用兩個字節表示就足夠了,那實際分配的會就只會是兩字節了.不一定就是默認的int類型的長度)

 

 

枚舉類型具體用法

一般的用法是在全局域內定義一個枚舉類型.比如

enum  MyEnum { one, two, three }

如果不顯式指定,就會把第一個值默認賦值為0,然后遞增1依次賦值.如果顯式指定了某個值,則它下一個是它加1.

所以上面的例子中默認one = 0; two = 1; three= 2;

如果顯式指定enum MyEnum { one, two = 3, three }

則one = 0; two = 3; three = 4;

 

定義一個枚舉類型就是MyEnum grade = MyEnum::one;

 

類中使用枚舉這是不太常用的用法.

在類中聲明一個枚舉后,定義枚舉類型就可以省掉那個域作用前綴.比如MyEnum my = one; 在相同的作用域內也不能出現某個變量的名字和枚舉中的元素名字相同,也就是不能出現其他變量名字是on,two, three

另外枚舉還有一種少見的用法是

enum { one ,two ,three};  就是不指定一個名字,這樣我們自然也沒法去定義一些枚舉類型了.此時就相當于const int one = 0;這樣定義三個常量一樣.

然后用的話就是int no = one;


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美变态国产另类| 国产精品人成电影| 欧美性xxxxx| 8050国产精品久久久久久| 最新国产成人av网站网址麻豆| 亚洲日本欧美中文幕| 亚洲tv在线观看| 亚洲精品成人久久电影| 热草久综合在线| 亲爱的老师9免费观看全集电视剧| 国产精品自拍偷拍| 91精品国产91久久久久久最新| 亚洲成人动漫在线播放| 91社影院在线观看| 久久精品成人欧美大片古装| 91网站免费观看| 欧美人在线视频| 亚洲专区中文字幕| 亚洲性无码av在线| 国产黑人绿帽在线第一区| 最近2019年好看中文字幕视频| 国产精品爱久久久久久久| 亚洲精品美女久久| 欧美日韩免费网站| 国产精品日韩专区| 亚洲欧美一区二区三区在线| 日韩一区二区三区在线播放| 日韩av在线免费看| 欧美小视频在线观看| 欧美制服第一页| 萌白酱国产一区二区| 国产婷婷97碰碰久久人人蜜臀| 日韩hd视频在线观看| 国产精品观看在线亚洲人成网| 在线一区二区日韩| 国产在线精品成人一区二区三区| 中文字幕视频在线免费欧美日韩综合在线看| 日韩一级黄色av| 欧美精品一区三区| 久久亚洲私人国产精品va| 91精品久久久久| 久久久久久噜噜噜久久久精品| 91爱爱小视频k| 国产久一一精品| 欧美精品999| 欧美日韩福利电影| 国产精品久久久久久网站| 久久成人一区二区| 欧美日韩在线另类| 色中色综合影院手机版在线观看| 欧美激情aaaa| 成人h视频在线观看播放| 欧美激情精品在线| 26uuu另类亚洲欧美日本老年| 欧美日韩在线一区| 日韩av一区二区在线| zzjj国产精品一区二区| 午夜精品一区二区三区在线| 久久91精品国产91久久跳| 欧美午夜宅男影院在线观看| 日韩电影免费在线观看中文字幕| 日韩欧美国产免费播放| 在线日韩第一页| 欧美性少妇18aaaa视频| 成人黄色短视频在线观看| 欧美在线视频在线播放完整版免费观看| 性欧美办公室18xxxxhd| 久久精品亚洲热| 欧美成人免费va影院高清| 在线观看国产成人av片| 亚洲最大的免费| 韩国国内大量揄拍精品视频| 亚洲精品91美女久久久久久久| 国产精品热视频| 久久综合色88| 久久久www成人免费精品张筱雨| 日韩精品极品在线观看| 亚洲欧美在线免费| 亚洲午夜激情免费视频| 国产97在线播放| 久久精品国产精品| 国产精品视频自拍| 中文字幕欧美精品日韩中文字幕| 中文字幕无线精品亚洲乱码一区| 97碰在线观看| 日韩精品在线免费| 性色av一区二区三区在线观看| 国产精品美女久久久免费| 欧美日韩激情视频| 亚洲精品98久久久久久中文字幕| 久久久久久久一| 久久久999精品视频| 欧美国产亚洲精品久久久8v| 国精产品一区一区三区有限在线| 亚洲国产精品系列| 最近2019中文字幕在线高清| 伦伦影院午夜日韩欧美限制| 亚洲福利视频久久| 亚洲精品97久久| 成人av色在线观看| 麻豆精品精华液| 亚洲人成在线观看网站高清| 亚洲精品国产精品国自产观看浪潮| 91精品国产91久久久| 中文字幕亚洲专区| 国产成人自拍视频在线观看| 久久这里有精品| 国产在线999| 久久夜精品香蕉| 亚洲一区中文字幕| 欧美精品在线免费| 欧美小视频在线| 91久热免费在线视频| 亚洲九九九在线观看| 懂色av中文一区二区三区天美| 精品国产欧美成人夜夜嗨| 亚洲综合日韩在线| 欧美国产日韩免费| 久久影视三级福利片| 日韩在线中文字幕| 91黄色8090| zzjj国产精品一区二区| 国产精品久在线观看| 神马久久桃色视频| 日韩欧美在线看| 欧美精品情趣视频| 中文字幕综合在线| 亚洲在线免费观看| 亚洲男人的天堂在线| 欧美一区二区.| 国产精品激情av在线播放| 久久久免费电影| 亚洲视频第一页| 欧美激情中文字幕在线| 在线午夜精品自拍| 久久99精品视频一区97| 精品动漫一区二区三区| 亚洲肉体裸体xxxx137| 亚洲理论电影网| 欧美亚洲激情在线| 成人xvideos免费视频| 国产精品7m视频| 26uuu日韩精品一区二区| 亚洲性视频网址| 亚洲最新av网址| 欧美日韩成人网| 亚洲影视九九影院在线观看| 国产一区玩具在线观看| 欧美成人激情视频| 永久免费毛片在线播放不卡| 欧美资源在线观看| 久久在精品线影院精品国产| 久久色免费在线视频| 992tv成人免费影院| 精品福利在线观看| 久久成人综合视频| 国产三级精品网站| 国产精品永久免费视频| 亚洲国产古装精品网站| 在线观看日韩专区| 国产91色在线免费| 国产精品三级在线| 国产精品看片资源| 尤物yw午夜国产精品视频明星|