cpp:enum引出的那些事

Getone超發表於2024-03-14

目錄
  • enum
    • 列舉的問題
    • 新特性
    • 類中常量

enum

列舉的問題

  • 作用域不受限,會容易引起命名衝突。例如下面無法編譯透過的:
enum Color
{
    RED,
    BLUE //重複
};
enum Feeling
{
    EXCITED,
    BLUE //重複
};

int main()
{
    Color a = BLUE; // error
    Feeling b = EXCITED;
    std::cout << a << ":" << b << std::endl;
    return 0;
}

新特性

C++11 標準中引入了“列舉類”(enum class),可以較好地解決上述問題。

enum class Color2
{
    RED=2,
    YELLOW,
    BLUE
};
Color2 c2 = Color2::RED;

類中常量

class Person{
public:
    typedef enum {
        BOY = 0,
        GIRL
    }SexType;
};

列舉常量的缺點是:它的隱含資料型別是整數,其最大值有限,且不能表示浮點。