어려움
// 챕터 9-1 : 고정폭 정수형과 enum class
// 55 : 00
//
// 기본 자료형의 바이트 크기
// char / short / long / long long / int == 1 / 2 / 4 / 8 / 4
//
// 고정폭 정수형
// C++11에서 아래와 같은 고정폭 정수형 자료형이 지원된다.
// int8_t / uint8_t == signed char / unsigned char
// int16_t / uint16_t == short / unsigned short
// int32_t / uint32_t == int / unsigned int
// int64_t / uint64_t == long long / unsigned long long
// intptr_t / uintptr_t == intptr_t p;
// 정수는 전부 int로 나타낸다.
//
// 특징 : 고정폭 정수형은 정수 자료형의 크기를 보장(고정)한다.
// 예시 : int8_t Score = Human01->GetID();
//
// enum class
// C++11부터 지원
// 독자적인 자료형으로 지원
// 정수형으로의 암시적 캐스팅이 없음. 필요하다면 프로그래머가 명시적으로 캐스팅 해야함
// enum class에는 기저 정수형을 지정할 수도 있음
// enum class 열거형명 : uint8_t과 같은 식으로 지정 가능하며 8비트 크기로 제한됨
#include <cstdint> // uint8_t를 위한 인클루드
enum class EPosition : uint8_t
{
TOP,
JUNGLE,
MID,
SUPPORT,
BOTTOM = 0x100
// 컴파일 경고가 나면서 8비트 부분만 떼서 0으로 저장되거나,
// 컴파일 에러가 날 수도 있습니다.
};
// Main.cpp
enum class EPosition
// enum class 클래스명
{
TOP, // == 0;
JUNGLE, // == 1;
MID, // == 2;
SUPPORT, // == 3;
BOTTOM // == 3;
// 요소
};
enum class EChamp
{
LEESIN,
LULU,
ZED,
BLITZ,
MISSFORTUNE
};
int main()
{
EPosition MyPosition = EPosition::SUPPORT;
EChamp MyChamp = EChamp::BLITZ;
int Number = MyPosition; // 컴파일 에러. enum class는 int 자료형으로의 암시적 형변환이 안됨.
if (MyPosition == EChamp::ZED) // 컴파일 에러. 서로 다른 enum class 간의 비교 연산 불가.
{
/* ... */
}
for (int i = EPosition::TOP; i <= EPosition::BOTTOM; ++i)
{
}
// 컴파일 에러. C언어에서 배운 (int) 형변환 연산자를 쓰거나 예시 : (int)(EPosition::TOP);
// static_cast<int>로 우회 가능.
for (int i = (int)(EPosition::TOP); i <= static_cast<int>(EPosition::BOTTOM); ++i)
{
}
// 컴파일 성공.
return 0;
}