欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

enum Gender{Male,Female};
Gender a=Male;
a=Female;
a=1;//錯誤

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

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

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

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

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

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

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

強(qiáng)類型枚舉(strong-typed enum)或者稱之為枚舉類,主要是針對上述三個缺陷進(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;//編譯錯誤
? ? if(t==Category::General)//編譯錯誤
? ? ? ? cout<<"A"<<endl;
? ? if(t> Type::General)//編譯通過
? ? ? ? cout<<"B"<<endl;
? ? if(t>0)//編譯錯誤
? ? ? ? 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)行等價替換
#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)類型枚舉的同時,可以顯式定義它的底層類型,enum class C: char,為了通用性,C++11也對C風(fēng)格枚舉進(jìn)行了這個優(yōu)化,即允許C風(fēng)格枚舉規(guī)定底層類型.

實際上,強(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語言之格式化屏幕輸出詳解

    C語言之格式化屏幕輸出詳解

    這篇文章主要介紹了C語言之格式化屏幕輸出的相關(guān)資料,需要的朋友可以參考下,小編覺得這篇文章寫的還不錯,希望能夠給你帶來幫助
    2021-11-11
  • C語言函數(shù)的遞歸和調(diào)用實例分析

    C語言函數(shù)的遞歸和調(diào)用實例分析

    一個函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用。這種函數(shù)稱為遞歸函數(shù)。C語言允許函數(shù)的遞歸調(diào)用。在遞歸調(diào)用中,主調(diào)函數(shù)又是被調(diào)函數(shù)。執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身,每調(diào)用一次就進(jìn)入新的一層
    2013-07-07
  • C++實現(xiàn)簡單職工管理系統(tǒng)

    C++實現(xiàn)簡單職工管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++職工管理系統(tǒng)實訓(xùn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • vscode刷acm、leetcode的題目

    vscode刷acm、leetcode的題目

    vscode是一款越來越受碼農(nóng)們喜愛的軟件,大多數(shù)人學(xué)習(xí)編程繞不開的一部分就是算法,很多人都喜歡刷LeetCode的題目,本文就來介紹一下
    2021-06-06
  • C++ 淺談emplace_back及使用誤區(qū)

    C++ 淺談emplace_back及使用誤區(qū)

    這篇文章主要介紹了C++ 淺談emplace_back及使用誤區(qū),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C語言實現(xiàn)經(jīng)典小游戲井字棋的示例代碼

    C語言實現(xiàn)經(jīng)典小游戲井字棋的示例代碼

    這個三子棋游戲是在學(xué)習(xí)C語言的過程中自己編寫的一個小游戲,現(xiàn)在將自己的思路(主要以流程圖形式和代碼中的注釋表達(dá))和具體代碼以及運行結(jié)果分享出來以供大家學(xué)習(xí)參考,希望對大家有所幫助
    2022-11-11
  • C語言仿QQ聊天界面抖動功能

    C語言仿QQ聊天界面抖動功能

    這篇文章主要為大家詳細(xì)介紹了C語言仿QQ聊天界面抖動功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C++ 中指針和引用有什么區(qū)別詳解

    C++ 中指針和引用有什么區(qū)別詳解

    這篇文章主要介紹了C++ 中指針和引用有什么區(qū)別詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C字符串與C++字符串的深入理解

    C字符串與C++字符串的深入理解

    本篇文章是對C字符串與C++字符串進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中auto關(guān)鍵字的使用

    C++中auto關(guān)鍵字的使用

    本文主要介紹了C++中auto關(guān)鍵字的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評論