c++枚举类型(二) c++11 枚举类
生活随笔
收集整理的這篇文章主要介紹了
c++枚举类型(二) c++11 枚举类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C++11 標準中引入了“枚舉類”(enum class),可以較好地解決如下問題。
新的enum的作用域不在是全局的
不能隱式轉換成其他類型
/*** @brief 上述如果 using namespace Color 后,前綴還可以省去,使得代碼簡化。* 不過,因為命名空間是可以隨后被擴充內容的,所以它提供的作用域封閉性不高。* 在大項目中,還是有可能不同人給不同的東西起同樣的枚舉類型名。* 更“有效”的辦法是用一個類或結構體來限定其作用域。** 定義新變量的方法和上面命名空間的相同。* 不過這樣就不用擔心類在別處被修改內容。* 這里用結構體而非類,一是因為本身希望這些常量可以公開訪問,* 二是因為它只包含數據沒有成員函數。*/ #include <iostream> using namespace std; /*** @brief namespace解決作用域不受限*/ namespace Color {enum Type{RED=15,YELLOW,BLUE}; };struct Color1 {enum Type{RED=102,YELLOW,BLUE}; };/*** @brief C++11的枚舉類* 下面等價于enum class Color2:int*/ enum class Color2 {RED=2,YELLOW,BLUE };enum class Color3:char; // 前向聲明// 定義 enum class Color3:char {RED='r',BLUE };int main() {// 定義新的枚舉變量Color::Type c = Color::RED;cout<<"c="<<c<<endl;/*** 上述的另一種方法:* using namespace Color; // 定義新的枚舉變量* Type c = RED;*/Color1 c1;cout<<c1.RED<<endl;Color1::Type c11 = Color1::BLUE;cout<<c11<<endl;Color2 c2 = Color2::RED;cout << static_cast<int>(c2) << endl;Color2 cc2 = Color2::BLUE;cout<< "cc2="<< static_cast<int>(cc2)<<endl;char c4 = static_cast<char>(Color3::RED);cout<<c4<<endl;char c3 = static_cast<char>(Color3::BLUE);cout<<c3<<endl;return 0; } c=15 102 104 2 cc2=4 r s總結
以上是生活随笔為你收集整理的c++枚举类型(二) c++11 枚举类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++枚举类型(二) 命名空间
- 下一篇: C++20四大之一:module特性详解