ENUM
1. 서로 다른 enum의 멤버의 이름이 중복될 수 없다.
enum MyEnum
{
test,
test1,
test2
};
enum MyENum2
{
test,
test3,
test4
};
int main()
{
MyEnum test = test1;
}
다른 Enum 목록이라도 같은 이름의 Enum을 재정의 하면 터짐
2. enum 타입의 값들이 자동으로 정수로 변환되어 계산, 비교 및 출력된다.
반복문과 같이 바로 정수처럼 사용할 수 있다. 이는 컴파일러가 묵시적으로 정수타입으로 변환해주기 때문이다.
enum MyEnum
{
test,
test1,
test2
};
enum MyENum2
{
test3,
test4,
test5
};
int main()
{
MyEnum a = test;
MyENum2 b = test3;
if(a == b){
int bb = 0;
}
}
3. 특정 enum 멤버를 따로 선언 및 초기화하지 않고 사용 가능하기 때문에 소속이 불분명하며 실수할 여지를 줄 수 있다. + 구분이 안됨
Enum Class -> 사용 권장
1. enum class라는 특정 타입을 가진다. 따라서 서로 다른 enum class 멤버의 이름이 중복될 수 있다.
enum class MyEnum
{
test,
test1,
test2
};
enum class MyENum2
{
test,
test1,
test2
};
int main()
{
MyEnum a = MyEnum::test;
MyENum2 b = MyENum2::test;
}
2. 형변환을 하지 않는 이상 서로 다른 enum class 타입끼리 비교할 수 없다.
3. class라는 타입이 생겼기 때문에 멤버를 소속없이 이름만 가지고 사용할 수 없다. -> + 구분 해줌