最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++11中強(qiáng)類型枚舉的使用

 更新時(shí)間:2023年02月02日 10:04:46   作者:Shawn-Summer  
本文主要介紹了C++11中強(qiáng)類型枚舉的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1.C/C++98中的枚舉的缺陷

枚舉在C語言中是狠古老的類型,它分為匿名枚舉和具名枚舉,如果是匿名枚舉,那么它的用法只有一種:

//方法一:
enum {Male,Female};

//方法二:
#define Male 0
#define Female 1

//方法三:
static const int Male=0;
static const int Female=1;

如上三種方法實(shí)現(xiàn)的效果是差不多的,不過采用宏方法會引起一些不必要的糾紛。方法一和方法三在實(shí)現(xiàn)效果上幾乎完全一致,方法一和方法三等價(jià)替換。

對于具名枚舉來說,一般用法就是聲明一個(gè)變量是枚舉類型的,然后該變量只能由枚舉成員初始化和賦值

enum Gender{Male,Female};
Gender a=Male;
a=Female;
a=1;//錯(cuò)誤

C/C++98中的枚舉的缺陷主要是三個(gè):

  • 對全局名稱空間的污染
  • 枚舉成員(或變量)可以隱式轉(zhuǎn)化為整型
  • 枚舉成員(或變量)的底層類型,即整型由編譯器決定

在C++11中,我們引入了名稱空間的概念,我們同樣希望枚舉成員能夠采用名字::成員的方式進(jìn)行訪問,而不是直接將大量的枚舉成員暴露在當(dāng)前名稱空間中。
此外.我們更希望枚舉類型獨(dú)立于整型,或者說,至少它不應(yīng)該自動轉(zhuǎn)化為整型,例如下面這樣。

    enum Gender{Male,Female};
    Gender a=Male;
    int b=a;
    int c=Female;

我們看最后一個(gè)缺陷,即枚舉成員(或變量)的底層類型一般是整型,但是不同的編譯器的設(shè)定不同,有可能一些是有符號整型,而另一種就是無符號整型。

enum Gender{Male=-1000,Female=9999};//這段代碼可能在某些編譯器中報(bào)錯(cuò)

2.強(qiáng)類型枚舉的使用

強(qiáng)類型枚舉(strong-typed enum)或者稱之為枚舉類,主要是針對上述三個(gè)缺陷進(jìn)行了修補(bǔ)。

#include<iostream>
using namespace std;
enum class Type {General,Light,Medium,Heavy};
enum struct Category{General=1,Pistol,MachineGun,Cannon};

int main()
{
? ? Type t=Type::Light;
? ? t=General;//編譯錯(cuò)誤
? ? if(t==Category::General)//編譯錯(cuò)誤
? ? ? ? cout<<"A"<<endl;
? ? if(t> Type::General)//編譯通過
? ? ? ? cout<<"B"<<endl;
? ? if(t>0)//編譯錯(cuò)誤
? ? ? ? cout<<"C"<<endl;
? ? cout<<is_pod<Type>::value<<endl;//1
? ? cout<<is_pod<Category>::value<<endl;

}

我們總結(jié)出

  • 強(qiáng)類型枚舉中的成員,只能采用名字::成員的方式進(jìn)行訪問
  • 強(qiáng)類型枚舉類型的變量,只能和同是強(qiáng)類型枚舉的值進(jìn)行比較
  • 強(qiáng)類型枚舉中的class關(guān)鍵詞,可以用struct進(jìn)行等價(jià)替換
#include<iostream>
using namespace std;
enum class C: char{C1=1,C2=2};
enum class D: unsigned int {D1=1,D2=2,Dbig=0xfffffff0u};
int main()
{
    cout<<sizeof(C::C1)<<endl;
    cout<<(unsigned int)D::Dbig<<endl;
    cout<<sizeof(D::D1)<<endl;
    cout<<sizeof(D::Dbig)<<endl;
}

而且我們在聲明強(qiáng)類型枚舉的同時(shí),可以顯式定義它的底層類型,enum class C: char,為了通用性,C++11也對C風(fēng)格枚舉進(jìn)行了這個(gè)優(yōu)化,即允許C風(fēng)格枚舉規(guī)定底層類型.

實(shí)際上,強(qiáng)類型枚舉也存在匿名類型,不過如果它是匿名的,你就無法訪問它的枚舉成員了,不過你可以使用decltype來找到名稱,不過也是多此一舉的,所以匿名強(qiáng)類型枚舉沒啥用。

到此這篇關(guān)于C++11中強(qiáng)類型枚舉的使用的文章就介紹到這了,更多相關(guān)C++11 強(qiáng)類型枚舉內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ STL關(guān)聯(lián)式容器自定義排序規(guī)則的2種方法

    C++ STL關(guān)聯(lián)式容器自定義排序規(guī)則的2種方法

    這篇文章主要介紹了C++ STL關(guān)聯(lián)式容器自定義排序規(guī)則的2種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 全局靜態(tài)存儲區(qū)、堆區(qū)和棧區(qū)深入剖析

    全局靜態(tài)存儲區(qū)、堆區(qū)和棧區(qū)深入剖析

    在C++中,內(nèi)存可分為系統(tǒng)數(shù)據(jù)區(qū),自由存儲區(qū),文本區(qū),const數(shù)據(jù)區(qū),全局靜態(tài)區(qū),堆區(qū)和棧區(qū)
    2012-11-11
  • C++調(diào)試追蹤class成員變量的方法

    C++調(diào)試追蹤class成員變量的方法

    本文所講的是不通過修改一個(gè)class的成員,就能夠追蹤其成員。方法就是類似C語言中的函數(shù)指針
    2013-11-11
  • 關(guān)于C++靜態(tài)成員函數(shù)訪問非靜態(tài)成員變量的問題

    關(guān)于C++靜態(tài)成員函數(shù)訪問非靜態(tài)成員變量的問題

    靜態(tài)成員函數(shù)不能訪問非靜態(tài)成員,這是因?yàn)殪o態(tài)函數(shù)屬于類而不是屬于整個(gè)對象,靜態(tài)函數(shù)中的 member可能都沒有分配內(nèi)存。靜態(tài)成員函數(shù)沒有隱含的this自變量。所以,它就無法訪問自己類的非靜態(tài)成員
    2013-10-10
  • C語言 實(shí)現(xiàn)歸并排序算法

    C語言 實(shí)現(xiàn)歸并排序算法

    這篇文章主要介紹了C語言 實(shí)現(xiàn)歸并排序算法的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • 詳解C++中的ANSI與Unicode和UTF8三種字符編碼基本原理與相互轉(zhuǎn)換

    詳解C++中的ANSI與Unicode和UTF8三種字符編碼基本原理與相互轉(zhuǎn)換

    在C++編程中,我們有時(shí)需要去處理字符串編碼的相關(guān)問題,常見的字符編碼有ANSI窄字節(jié)編碼、Unicode寬字節(jié)編碼及UTF8可變長編碼。很多人在處理字符串編碼問題時(shí)都會有疑惑,即便是有多年工作經(jīng)驗(yàn)的朋友也可能搞不清楚。所以有必要講一下這三種字符編碼以及如何去使用它們
    2021-11-11
  • C++編輯距離(動態(tài)規(guī)劃)

    C++編輯距離(動態(tài)規(guī)劃)

    這篇文章主要介紹了C++編輯距離(動態(tài)規(guī)劃),編輯距離是指兩個(gè)字符串之間,由一個(gè)轉(zhuǎn)成另一個(gè)所需的最少編輯操作次數(shù),限免詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-01-01
  • c++幾種基本的插入排序(圖文)

    c++幾種基本的插入排序(圖文)

    這篇文章主要介紹了c++幾種基本的插入排序(圖文),需要的朋友可以參考下
    2014-11-11
  • 深入理解C++編程中的局部變量和全局變量

    深入理解C++編程中的局部變量和全局變量

    這篇文章主要介紹了深入理解C++編程中的局部變量和全局變量,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C語言二叉樹層序遍歷

    C語言二叉樹層序遍歷

    這篇文章主要介紹了C語言二叉樹層序遍歷,文章基于C語言的相關(guān)資料展開詳細(xì)的文章內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助
    2022-04-04

最新評論

安乡县| 宁德市| 海盐县| 临湘市| 河间市| 遂平县| 宁都县| 万宁市| 商河县| 任丘市| 彭州市| 武义县| 邢台市| 广安市| 文安县| 新和县| 永川市| 安丘市| 扎囊县| 肥城市| SHOW| 大新县| 漳浦县| 巩留县| 信宜市| 荥经县| 玉田县| 锡林浩特市| 宿迁市| 曲水县| 正镶白旗| 东方市| 普定县| 施秉县| 白水县| 江津市| 咸宁市| 乐安县| 阳谷县| 盐城市| 长岭县|