enum
sampleEnum.cpp
enum SampleEnum : int
{
se1,
se2
};
void Function()
{
auto val1=se1;
auto val2=SampleEnum::se2;
std::cout << "val1:" << val1 << ",val2:" << val2 << std::endl;
}
- スコープを持たない列挙型
- 暗黙的にint型になる
enum class
sampleEnumClass.cpp
enum class SampleEnumClass : int
{
sec1,
sec2
};
void Function(){
// auto val1=sec1; // !コンパイルエラー
auto val2=SampleEnumClass::sec2;
std::cout << "val2:" << static_cast<int>(val2) << std::endl;
}
- 明示的なキャストが必要になる
- enum class 名を明示的なスコープとして指定する必要がある
共通すること
- enum (class)
hoge
の後に規定型を指定できる - 前方宣言ができる
比較
例 | enum | enum class | |
---|---|---|---|
規定型の指定 | enum SampleEnum : int | ○できる | ○できる |
前方宣言 | enum SampleEnum : int; | ○できる | ○できる |
列挙への直接的なアクセス | auto = se1; | ○できる | ×できない |
列挙への直接的なアクセス例 | SampleEnum v = se1; SampleEnum v=SampleEnum:se1; |
SampleEnumClass v = SampleEnumClass:sec1; | |
値をint型としてアクセス | int i=v; | int i = static_cast<int>(v) |