Casting

headkio·2020년 9월 9일
0

C++

목록 보기
7/35
post-thumbnail

암시적 캐스팅

  • 컴파일러 자동 형변환
int num1 = 3;
long num2 = num1; // 암시적 캐스팅

명시적 캐스팅

  • 프로그래머가 직접 형변환

  • 기존 C 캐스팅이 너무 많은 일을 한다. 4가지로 구분하여 의도를 명확하게 한다.

    1. static_cast
    2. const_cast
    3. dynamic_cast
    4. reinterpret_cast

static_cast

// C
int num2 = (int)num1;
Cat* myCat = (Cat*)myPet;

// C++
int num2 = static_cast<int>(num1); // 값 형변환
Cat* myCat = static_cast<Cat*>(myPet); // 포인터 형변환

const_cast

// C
void Foo(const Animal* ptr)
{
	Animal* animal = (Animal*)ptr;
}

// C++
void Foo(const Animal* ptr)
{
	Animal* animal = const_cast<Animal*>(ptr);	
}

// const를 강제로 바꾸는 건 Bad Code -_-

reinterpret_cast

// C
unsigned int myPetAddr = (unsigned int)myPet;

// C++
unsigned int myPetAddr = reinterpret_cast<unsigned int>(myPet)

dynamic_cast

// C
Cat* myCat = (Cat*)myPet;

// C++
Cat* myCat = dynamic_cast<Cat*>(myPet);
profile
돌아서서 잊지말고, 잘 적어 놓자

0개의 댓글