반응형
코드의 가독성을 높일 수 있다.
enum { A, B, C }; // A = 0, B = 1, C = 2;
int main() {
if(A == 0)
cout << "YES";
}
OUTPUT : YES
enum { A, B = 2, C }; // A = 0, B = 2, C = 3;
int main() {
if(C == 3)
cout << "YES";
}
OUTPUT : YES
열거체에 이름 지정하기
enum ALPHABET { A, B, C };
int main() {
ALPHABET x = C;
cout << x;
}
OUTPUT : 2
ENUM은 산술연산 불가
열거체는 정수형으로 동작하는 것 같지만, 완전히 같지는 않다.
비교할 때에는 정수형과 비교가 가능했지만 산술연산은 안된다.
enum Color { RED, GREEN, BLUE, YELLOW };
int main() {
Color c1 = RED;
c1 = GREEN + BLUE; // 불가능!!
c1 = c1 + 2; // 불가능!!
}
ENUM에 정수 대입도 불가
enum Color { RED, GREEN, BLUE, YELLOW };
int main() {
Color c1 = RED;
Color c2;
c2 = 3; // 불가능
}
하지만
c2 = (Color)3; // 이렇게 명시적으로 캐스팅하면 가능하다.
또한 INT형에 ENUM 대입은 가능, 산술연산 결과도 가능
enum Color { RED, GREEN, BLUE, YELLOW };
int main() {
Color c1 = RED;
int n = BLUE;
int o = GREEN + BLUE;
}
마치, ENUM은 INT의 자식느낌이고
INT가 ENUM을 담는 것은 묵시적으로 캐스팅되나
ENUM이 INT를 담으려면 명시적으로 캐스팅해야하는 것이라고 보면 된다.
ENUM은 또한 중복이 불가능하다
enum C { PASS, FAIL };
enum JAVA { PASS, FAIL };
이렇게 다른 enum 선언이라도 중복이 발생하면 코드가 컴파일 되지 않는다.
이를 해결할 방법 중 namespace를 이용하는 방법이 있다.
namespace sophomore {
enum C { PASS, FAIL };
}
namespace freshman {
enum JAVA { PASS, FAIL };
}
디렉토리, 패키지를 다르게 하여 다른 공간에 있도록 한다고 보면 된다.
또한 C++ 11부터 enum class가 등장하여, 또다른 해결 방법이 있다.
enum class C { PASS, FAIL };
enum class JAVA { PASS, FAIL };
사용할 땐 그냥 PASS, FAIL이 아니라
C::PASS, JAVA::FAIL 이런식으로 사용해야한다.
이렇게 class 타입으로 선언하게 되면, 아까처럼 비교 자체도 정수와 할 수 없게 된다.
C::PASS == 0 비교 불가.
반응형
'[C++]' 카테고리의 다른 글
[C++] 함수 포인터 (0) | 2021.06.24 |
---|---|
[C++] REFERENCE (0) | 2021.06.24 |
[C++] 구조체 크기 관련 (0) | 2021.06.23 |
[C++] 공용체. Union, 주의점!! (0) | 2021.06.22 |
[C++] 구조체와 포인터 (0) | 2021.06.22 |