網頁

2022/8/2

C++ enum 列舉型態簡介

C++ 列舉型態(enumerated type)又稱enumeration簡稱enum,為可自訂一組常數及對應名稱的型態。


列舉中可定義多個以逗號分隔的列舉項目(enumerators),每一列舉項目實為一常數,而列舉物件僅代表一特定列舉項目的值。列舉的好處是其物件僅接收列舉項目並能以列舉項目判斷是否相等,藉此限定列舉項目其背後常數的範圍。


宣告enum

宣告enum的語法如下:

  • enum - 宣告列舉型態的關鍵字。
  • TypeName - 列舉的名稱,習慣用UpperCamelCase命名。
  • ENUMERATOR1-3 - 列舉項目。習慣用UPPER_SNAKE_CASE命名。
enum TypeName {
    ENUMERATOR1,
    ENUMERATOR2,
    ENUMERATOR3,
    ...
};

例如下面定義一個enum型別Color及其列舉項目REDBLUEGREEN

enum Color { RED, BLUE, GREEN };


Enum的值

列舉項目的值預設是從0開始依序遞增的整數,例如上面的RED值為0、BLUE值為1,以此類推。

main.cpp

#include <iostream>
using namespace std;

enum Color { RED, BLUE, GREEN };

int main() {
    cout << Color::RED << endl;   // 0
    cout << Color::BLUE << endl;  // 1
    cout << Color::GREEN << endl; // 2

    return 0;
}

宣告時可以明確設定列舉項目的值,而後面未設定的項目值為前一項的值遞增1。

main.cpp

#include <iostream>
using namespace std;

enum Color { RED = 2, BLUE, GREEN = 1 };

int main() {
    cout << Color::RED << endl;   // 2
    cout << Color::BLUE << endl;  // 3
    cout << Color::GREEN << endl; // 1

    return 0;
}


範例

下面範例宣告列舉Color,並定義其變數color值為BLUE。列舉可直接以列舉項目判斷相等性。

main.cpp

#include <iostream>
using namespace std;

enum Color { RED, BLUE, GREEN };

int main() {
    Color color{Color::BLUE};

    if (color == Color::BLUE) {
        cout << "color is blue" << endl;
    }

    switch (color) {
        case Color::RED:
            cout << "red" << endl;
            break;
        case Color::BLUE:
            cout << "blue" << endl;
            break;
        case Color::GREEN:
            cout << "green" << endl;
            break;
        default:
            break;
    }

    return 0;
}

執行印出以下:

color is blue
blue


沒有留言:

張貼留言