카테고리 없음

04 - 1 C++ 보충 2-9챕터

pp4037 2026. 4. 3. 01:03

 

어려움

 

// 챕터 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;
}