1. 程式人生 > >C++列舉型別Enum及C++11強列舉型別用法

C++列舉型別Enum及C++11強列舉型別用法

列舉常常和switch配合使用,用一個程式碼片段來說明:

    //W A S D 前、後、左、右行走\nQ E 左、右轉頭\nF 復位\nG H 暫停、繼續、重播例項\nY 停止例項\nB 刪除例項\nSPACE 刪除所有例項
    enum Keydown{ Forward='w', Back='s', Left='a', Right='d', Lyaw='q', Ryaw='e',
        Reset = 'f', Pause = 'g', Continue = 'h', Stop = 'y', Delete = 'b', DeleteAll = 32
    }key;

    
while (true){ if (_kbhit()){//接受鍵盤迴調 key = Keydown(_getch()); switch (key){ case ('q') ://按q 朝左擺頭 { Rotate(-2.f); break; } case ('e') ://按e 朝右擺頭 { Rotate(2.f);
break; } case ('w') ://按w 往前走 { Move(0.f, 0.f, -0.1f); break; } case ('a') ://按a 朝左走 { Move(-0.1f, 0.f, 0.f); break; } case('s') ://按s 往後走 { Move(
0.f, 0.f, 0.1f); break; } case('d') ://按d 朝右走 { Move(0.1f, 0.f, 0.f); break; } case('f') ://按f 復位 { SetPosition(0.f, 0.f, 1.f); SetOrientation(0.f, 0.f, -1.0, 0.f, 1.f, 0.f); break; } case('r') ://按r 轉頭 { Rotate(180.f); break; } case(32) ://按space 銷燬所有例項 { DestoryAllInstance(); break; } case('b') ://按b 銷燬一個例項 { DestoryInstance(pIns1); break; } case('g') ://按g 暫停 { pIns1->Pause() ; break; } case('h') ://按h { pIns1->Continue(); break; } case('y') ://按y 停止 { pIns1->Stop(); break; } default: continue; } } }

而C++11加入了強列舉型別

C++11之前,若是同一作用域下有兩個不同的列舉型別,但含有相同的列舉常量也是不可的,比如:

enum EnumType1{Yang,Li};
enum EnumType2{Li,Zhang};

這樣是不行的。

強列舉型別用class關鍵字來宣告,如:

enum class Enumeration{
    E1=10
    E2=20
    E3,
    E4,
};

強型別列舉之所以能解決在不同列舉類下同列舉值名的問題,是因為在使用強列舉型別的列舉名時,必須指明所屬範圍,比如:Enum::E1,而單獨的E1則不再具有意義。