亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關于C++11中限定作用域的枚舉類型的問題

 更新時間:2022年01月27日 10:26:23   作者:余生以學  
C++中有兩種類型的枚舉:不限定作用域的枚舉類型和限定作用域的枚舉類型。限定作用域的枚舉類型是C++11標準引入的新類型,對C++11中限定作用域的枚舉類型相關知識感興趣的朋友一起看看吧

枚舉類型是將一組有限的整數(shù)常量組織在一起用以描述變量可取值范圍的一種數(shù)據類型。C++中有兩種類型的枚舉:不限定作用域的枚舉類型和限定作用域的枚舉類型。限定作用域的枚舉類型是C++11標準引入的新類型。

● 限定作用域枚舉類型是為了彌補不限定作用域枚舉類型的不足而出現(xiàn)的,不限定作用域的枚舉類型不是類型安全的,主要表現(xiàn)在如下幾個方面:

● 不限定作用域的枚舉類型中的枚舉成員被視為整數(shù),兩種不同的枚舉類型之間可以進行比較。兩種不同類型的數(shù)據進行比較,可能帶來數(shù)據類型轉換,引起數(shù)據表示不完整。

● 不限定作用域枚舉所使用的整數(shù)類型及其大小都由實現(xiàn)方法定義,皆無法明確指定。

● 不限定作用域枚舉類型的枚舉成員與枚舉類型外部數(shù)據處在同一個作用域范圍內,多個枚舉類型不能有同名的枚舉成員。

C++11標準引入的限定作用域的枚舉類型,其定義方式如下所示:

enum class 枚舉類型名稱 {枚舉成員1, 枚舉成員2, …, 枚舉成員n};

相對于不限定作用域的枚舉類型,限定作用域的枚舉類型定義的枚舉成員在枚舉類型作用域外不可訪問。

//定義不限定作用域枚舉類型
enum color {red, yellow, green};  
//錯誤,不限定作用域枚舉成員不能與其它枚舉類型成員同名
enum stoplight{red, yellow, green}; 

//正確,限定作用域枚舉成員的作用域限定在類型內
enum class newcolor {red, yellow, green}; 
//正確,不限定作用域的枚舉類型外可以使用枚舉成員
color e_color = green;       
//錯誤,限定作用域的枚舉成員在類型外不可訪問
//雖然color類型的green成員可訪問,但是color與newcolor類型不同,不可賦值
newcolor ec_color = green;   

在舊標準中,枚舉變量可以使用整數(shù)常量進行賦值,但在C++11標準中,要想初始化枚舉類型對象或對枚舉對象賦值,必須使用該類型的一個枚舉成員或該類型的一個對象。示例代碼如下所示:

enum color {red, yellow, green};  
enum class newcolor {red, yellow, green};  

color e_var1 = 1;                 //錯誤,1不是枚舉類型值
color e_var2 = red;                //正確,red是color類型的枚舉值
color e_var3 = e_var2;             //正確,同類型數(shù)據之間的賦值
newcolor e_nvar1 = newcolor::red;       //正確,red是newcolor類型的枚舉值

不限定作用域的枚舉類型對象或枚舉成員可以自動轉化為整型,因此可以在需要整數(shù)的地方使用它們,限定作用域的枚舉類型卻沒有此特點。示例代碼如下所示:

int i = color::red;               //正確,不限定作用域的枚舉成員可轉化為整數(shù)
int j = newcolor::red;             //錯誤,限定作用域的枚舉成員不可轉化為整數(shù)

C++11新標準除了增加了限定作用域枚舉類型外,還改進了原有的不限定作用域枚舉類型的定義形式:

1、枚舉類型中枚舉成員的類型可以顯式指定,指定方式是在枚舉類型名稱后加冒號和枚舉成員類型。

enum intvalues:unsigned long long{
  chartype = 255, shorttype = 65535, inttype = 4295967295,
  longtype = 4294967295ul,
  longlongtype = 18446744073709551615ul
};

若不指定枚舉成員類型,限定作用域枚舉類型成員默認為int,不限定作用域枚舉類型成員不存在默認類型,能夠確定的是成員類型足夠大到能容納所有成員。指定了枚舉成員類型后,若某一枚舉成員值超出了該類型所能容納的范圍,將引發(fā)錯誤。

2、在C++11 中,可以提前聲明enum。enum的前置聲明必須指定枚舉成員類型,隱式指定或顯式指定均可。

enum etype1;              //錯誤,不限定作用域枚舉類型的前置聲明應指定成員類型
enum etype2:unsigned int;      //正確
enum class etype3;          //正確,限定作用域枚舉類型成員有默認類型int 
enum class etype4:unsigned int;  //正確,前置聲明指定枚舉成員類型

與所有的聲明語句一樣,枚舉的聲明和定義中描述的成員類型必須一致,另外不能在同一個上下文中先聲明一個不限定作用域的枚舉類型再聲明一個同名的限定作用域枚舉類型。

enmu class Clolor:char; //前置聲明枚舉類
void Foo(Color*p); //前置聲明的使用
//....................
enum class Color:char{RED,GREEN,BLACK,WHITE}; //前置聲明的定義

參考鏈接:

C++11強類型枚舉——枚舉類

限定作用域的枚舉類型 - C語言學習教程_C語言程序_ c語言編程_ c語言入門

到此這篇關于C++11:限定作用域的枚舉類型的文章就介紹到這了,更多相關C++11作用域枚舉類型內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳細總結C++的排序算法

    詳細總結C++的排序算法

    趁空閑時間,小編決定把C++的排序算法分析并總結下,以便溫故知新。也方便需要的朋友可以參考學習。
    2016-07-07
  • MFC實現(xiàn)學生選課系統(tǒng)

    MFC實現(xiàn)學生選課系統(tǒng)

    這篇文章主要為大家詳細介紹了MFC實現(xiàn)學生選課系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C語言超詳細講解數(shù)據結構中的線性表

    C語言超詳細講解數(shù)據結構中的線性表

    線性表,數(shù)據結構中最簡單的一種存儲結構,專門用于存儲邏輯關系為"一對一"的數(shù)據。線性表是基于數(shù)據在實際物理空間中的存儲狀態(tài),又可細分為順序表(順序存儲結構)和鏈表
    2022-05-05
  • C++中的單例模式介紹

    C++中的單例模式介紹

    單例模式也稱為單件模式、單子模式,可能是使用最廣泛的設計模式。其意圖是保證一個類僅有一個實例,并提供一個訪問它的全局訪問點,該實例被所有程序模塊共享
    2013-03-03
  • c++中的基本IO類型詳解

    c++中的基本IO類型詳解

    IO的設備可以是文件、控制臺、string。c++主要定義了三種IO類型,分別被包含在iostream、fstream、sstream頭文件中,本文給大家分享c++中的基本IO類型,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • C/C++?Qt?數(shù)據庫與TreeView組件綁定詳解

    C/C++?Qt?數(shù)據庫與TreeView組件綁定詳解

    本篇文章主要介紹了QT數(shù)據庫與View組件的綁定,通過數(shù)據庫與組件關聯(lián)可實現(xiàn)動態(tài)展示數(shù)據庫中的表記錄。感興趣的小伙伴可以了解一下
    2021-12-12
  • C++中線性代數(shù)計算Eigen庫的使用教程詳解

    C++中線性代數(shù)計算Eigen庫的使用教程詳解

    Eigen是一個基于線性代數(shù)的C++模板庫,主要用于矩陣、向量、數(shù)值求解和相關算法,本文主要為大家簡單聊聊Eigen庫的使用,希望對大家有所幫助
    2023-12-12
  • C++超詳細講解單鏈表的實現(xiàn)

    C++超詳細講解單鏈表的實現(xiàn)

    單鏈表是后面要學的雙鏈表以及循環(huán)鏈表的基礎,要想繼續(xù)深入了解數(shù)據結構以及C++,我們就要奠定好這塊基石!接下來就和我一起學習吧
    2022-03-03
  • C語言如何實現(xiàn)循環(huán)輸入

    C語言如何實現(xiàn)循環(huán)輸入

    這篇文章主要介紹了C語言如何實現(xiàn)循環(huán)輸入問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++ 再識類和對象

    C++ 再識類和對象

    類是創(chuàng)建對象的模板,一個類可以創(chuàng)建多個對象,每個對象都是類類型的一個變量;創(chuàng)建對象的過程也叫類的實例化。每個對象都是類的一個具體實例(Instance),擁有類的成員變量和成員函數(shù)
    2021-10-10

最新評論