C++枚舉類型enum與enum class的使用
一.關(guān)于枚舉類型
1. 什么是枚舉類型?
答:如果一個變量只有幾種可能的值,那么就可以定義為枚舉類型,比如:性別只有男和女,那么就可以將性別定義為一種枚舉類型,其中男和女就是性別所包含的變量。所謂”枚舉”是指將變量的值一一列舉出來,變量的值只能在列舉出來的值的范圍內(nèi)。在C++中,枚舉類型分為不限定作用域(enum)和限定作用域(enum class)。
2. enum與enum class的區(qū)別? (為什么需要限定作用域?)
答:枚舉作用域是指枚舉類型成員名字的作用域,起自其聲明之處,終止枚舉定義結(jié)束之處。enum與class enum區(qū)別在于是否限定其作用域。C語言規(guī)定,枚舉類型(enum)的成員的可見范圍被提升至該枚舉類型所在的作用域內(nèi)。這被認(rèn)為有可能污染了外部的作用域,為此,C++11引入了枚舉類(enum class)解決此問題。
舉個例子:
通常情況下,我們定義一個枚舉類型:
enum Sex { Girl, Boy };
這時,你不可以再使用一個枚舉去定義Girl 和 Boy了,如:
// 錯誤,編譯器提示 Girl,Boy重定義 enum Student { Girl, Boy };
編譯錯誤的原因在于Sex與Student都處在同一作用域下,成員變量重定義。
這便體現(xiàn)C++11引入枚舉類(enum class)的重要性,enum class能夠有效對枚舉作用域進(jìn)行限定,避免了枚舉成員的重定義。
enum class Sex { Girl, Boy }; enum class Student { Girl, Boy }; int main(int argc, char *argv[]) { Sex a = Sex::Gril; Student b = Student::Gril; //兩者處于不同作用域下,不會重定義 }
二.枚舉類型enum的使用
定義:
enum /*枚舉類型*/ { /*枚舉成員*/, /*枚舉成員*/, /*枚舉成員*/ }; 如: enum Sex { Girl, Boy };
聲明:
Sex a=Girl;
注意:
1.枚舉中每個成員(標(biāo)識符)結(jié)束符是“,”而不是”;” 最后一個成員可省略”,”
2.初始化時可以賦負(fù)數(shù),以后的標(biāo)識符仍依次加1。
3.枚舉變量只能取枚舉說明結(jié)構(gòu)中的某個標(biāo)識符常量。
4.在外部可以對枚舉變量進(jìn)行賦值,但需要進(jìn)行類型轉(zhuǎn)換。
5.枚舉常數(shù)可以隱式轉(zhuǎn)換為int,但是int不可以隱式轉(zhuǎn)換為枚舉值。
6.為枚舉中的每個名稱分配一個整數(shù)值,該值與其在枚舉中的順序相對應(yīng)。默認(rèn)情況下,第一個值分配0,下一個值分配1,依次類推,但也可以顯示設(shè)置枚舉名稱的值。
7.枚舉值可以用來作判斷比較。
三.枚舉類型enum class的使用
定義:
enum class/*枚舉類型*/ { /*枚舉成員*/, /*枚舉成員*/, /*枚舉成員*/ };
如:
enum class Sex { Girl, Boy };
聲明:
Sex a=Sex::Gril;
枚舉定義將被限制在枚舉作用域內(nèi),并且不能隱式轉(zhuǎn)換為整數(shù)類型,但是可以顯式轉(zhuǎn)化為整數(shù)類型,如下:
enum class Sex { Girl, Boy }; int main(int argc, char *argv[]) { Sex a=Sex::Gril; int d1 =a; // 錯誤,無法從“Girl”隱式轉(zhuǎn)換為“int”。 int d2 = int(a); // 正確,顯示將enum class轉(zhuǎn)換為整數(shù) return 0; }
到此這篇關(guān)于C++枚舉類型enum與enum class的使用的文章就介紹到這了,更多相關(guān)C++枚舉類型enum與enum class 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++語言中std::array的用法小結(jié)(神器用法)
這篇文章主要介紹了C++語言中std::array的用法小結(jié),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11vc提示unexpected end of file found的原因分析
這篇文章主要介紹了vc提示unexpected end of file found的原因分析,給出了幾點(diǎn)常見錯誤原因的分析,需要的朋友可以參考下2015-05-05C++中用substr()函數(shù)消除前后空格的解決方法詳解
本篇文章是對C++中用substr()函數(shù)消除前后空格的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C語言實現(xiàn)打印楊輝三角的方法詳細(xì)(三種方法)
楊輝三角是中國古代數(shù)學(xué)的杰出研究成果之一,它把二項式系數(shù)圖形化,把組合數(shù)內(nèi)在的一些代數(shù)性質(zhì)直觀地從圖形中體現(xiàn)出來,是一種離散型的數(shù)與形的結(jié)合。本文將介紹三種可以實現(xiàn)打印楊輝三角的辦法,感興趣的可以試一試2022-01-01基于C語言char與unsigned char的區(qū)別介紹
本篇文章小編為大家介紹,基于C語言char與unsigned char的區(qū)別介紹。需要的朋友參考下2013-04-04