C++ の列挙型を再定義する方法を教えてください。

C++のenumは列挙型であり、定数の集合を定義するために使用されます。enum型は一度だけ定義できますが、再定義することはできません。ただし、enum型を再定義する必要がある場合は、enum classキーワードを使用します。

enum class は C++11 で導入された機能で、型の安全性が高い列挙型を作成するために使われます。enum class で定義した列挙型は、自動的に整数型に変換されず、列挙値のスコープは enum class 内に限定されます。

enum classを使用してenum型を再定義する例を以下に示します。

enum class Color { Red, Green, Blue };

int main() {
    Color color = Color::Red;
    // color = 0;  // 错误,不能将整数赋值给enum class类型
    // color = Color::Green;  // 错误,不能将不同的enum class类型赋值给color
    
    if (color == Color::Red) {
        // ...
    }
    
    return 0;
}

この例では、enum class ColorがRed、Green、Blueの3つの列挙値を定義しています。enum classで定義した列挙型は、整数に直接代入することはできず、異なるenum class型同士での代入もできません。また、列挙値のスコープはColor内部に限定されており、Color::Redのようにして列挙値にアクセスする必要があります。

enum classに置き換えるとenumの値が自動的に整数型に変換されなくなることに注意。明示的に変換しないと、enumの値を整数に変換することができません。

bannerAds