列舉和列舉的取值範圍

没尾巴的刺刺鱼發表於2024-07-03

1,列舉

1.1 基本使用

#include <iostream>
using namespace std;
// 列舉對應的值為[0,1,2,3]
enum color {red, blue, green, yellow};

int main()
{
    color c;
    c = red;
    cout << c << endl;

    // 整形賦值需要強制型別轉換
    c = (color)2;
    cout << c << endl;

    // 超出變數範圍不會報錯,但是不提倡使用,也不應該依賴該值
    // 是非法的
    c = (color)1024;
    cout << c << endl;

    // 列舉值可自動轉換為int
    int n = blue;
    cout << n << endl;

}

// 列舉值不支援除了=之外的其他運算子,比如+,-等。這是不合法的。列舉沒有定義這些符號。

1.2 列舉賦初值

#include <iostream>
#include <stdio.h>
using namespace std;
// 列舉對應的值為[0,3,4,0,1]
enum color {red, blue=3, green, yellow=0, orange};
// 從0開始,其中沒有賦值的將向前查詢最近的有賦值的元素然後自然增長,依次類推
int main()
{
    printf_s("%d %d %d %d %d\n", red, blue, green, yellow, orange);

}

1.3 列舉的範圍

// 現代c++可以透過強制型別轉換將int值轉換為列舉值
// 每個列舉都有其合法的取值範圍,其範圍為:
// 上限:取大於列舉最大值最小的2的冪值-1,
// 下限:如果為最小值為正數,則下限取0,如果為負數,取小於列舉最小值最大的2的冪值+1,
enum bits {value=-6, one=1, two=2,eight=8};
// bits的合法的上限為:bits最大的值為8,則大於列舉最大值8最小的2的冪為16,-1則為15
// bits的合法下限位:bits最小的值為-6,則小於列舉最小值-6的最大的2的冪為-8,+1則為-7,
//所以bits的合法範圍為[-7,15]

相關文章