列挙型はC言語にも存在しており、C++ でもその仕様を受け継いだものが使用できましたが、C言語の列挙型にはスコープの概念がなく、列挙子と同名の識別子が他に存在すると名前が衝突する問題がありました。scoped enum はこの問題を解決するために C++11 で導入されました。なお、従来の列挙型は unscoped enum とも呼ばれるようになっています。
scoped enum は、enumキーワードに加えて、classキーワードあるいは structキーワードを使って定義します(どちらを使っても同じです)。
enum class BloodType {
,
A,
B,
AB
O};
scoped enum の列挙子を用いる際には、列挙型の名前(列挙名)と、スコープ解決演算子(::
)を組み合わせて記述しなければなりません。
blood_type = BloodType::AB; BloodType
型のチェックも厳密になっており、存在する列挙子以外の値を与えると、コンパイルエラーとして検出されます。
blood_type = 345; // コンパイルエラー BloodType_tag
C++ の列挙型についての詳細は、新C++編「列挙型」を参照してください。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
![]() |
管理者情報 | プライバシーポリシー |