[TIL] 2026-01-15 | C++ 캐스트(cast) 연산자

2026. 1. 15. 10:02·내배캠Unreal_TIL/C++

static_cast<변경할 타입>(변경할 대상)

1. static_cast

논리적으로 변환이 가능한 타입에 대해서만 캐스팅, 논리적으로 맞지 않다면 컴파일 에러 발생

int i{ 3 };
int j{ 4 };
double result{ static_cast<double>(i) / j };

 

상속 계층에서 다운 캐스팅을 수행할 때 사용 가능

class Base
{
public:
    virtual ~Base() = default;
};
 
class Derived : public Base
{
public:
    virtual ~Derived() = default;
};
 
int main()
{
    Base* b{ nullptr };
    Derived* d{ new Derived{} };
    b = d; // Don't need a cast to go up the inheritance hierarchy
    d = static_cast<Derived*>(b); // Need a cast to go down the hierarchy
 
    Base base;
    Derived derived;
    Base& br{ derived };
    Derived& dr{ static_cast<Derived&>(br) };
}

 

 

2. dynamic_cast

같은 상속 계층에 속한 타입끼리 캐스팅할 때 실행 시간에 타입을 검사.

실패 시 포인터는 nullptr 리턴, 래퍼런스는 std::bad_cast 예외 발생.

class Base
{
public:
    virtual ~Base() = default;
};
 
class Derived : public Base
{
public:
    virtual ~Derived() = default;
};

 

올바른 사용 예

int main()
{
    Base* b;
    Derived* d{ new Derived{} };
    b = d;
    d = dynamic_cast<Derived*>(b);
}

 

예외 발생 예

int main()
{
    Base base;
    Derived derived;
    Base& br{ base };
    try {
        Derived& dr{ dynamic_cast<Derived&>(br) };
    }
    catch (const std::bad_cast&) {
        std::cout << "Bad cast!" << std::endl;
    }
}

 

 

3. const_cast

포인터 또는 참조형에 const 속성을 추가 또는 제거.

void ThirdPartyLibraryMethod(char* str);
 
void f(const char* char)
{
    ThirdPartyLibraryMethod(const_cast<char*>(str));
}

 

 

4. reinterpret_cast

임의의 포인터 타입끼리 변환을 허용하는 캐스트 연산자이다.

​

포인터 > 포인터

포인터 > 일반변수

일반변수 > 포인터

자료형 > 다른자료형

 

5.참고

https://blog.naver.com/kimdanang7131/222975582150

 

C++ 캐스트(Cast) 연산자

C언어의 캐스팅은 2가지로 나뉜다. 이전 글에서 설명한 묵시적 타입 변환과 명시적 타입변환 사실상 묵시...

blog.naver.com

https://junstar92.tistory.com/317

 

[C++] 캐스팅(Casting)

References Professional C++ https://en.cppreference.com/w/ Contents const_cast() static_cast() reinterpret_cast() dynamic_cast() std::bit_cast() C++에서는 어떤 타입을 다른 타입으로 캐스팅하기 위한, const_cast(), static_cast(), reinterp

junstar92.tistory.com

 

'내배캠Unreal_TIL > C++' 카테고리의 다른 글

[TIL] 2026-01-20 | C++ int to char / char to int / int to string / string to int  (0) 2026.01.20
[TIL] 2026-01-19 | C++ Set 사용  (0) 2026.01.19
[TIL] 2026-01-12 | C++ 프로그래머스 행렬의 덧셈, 직사각형 별찍기, 최대공약수와 최소공배수  (0) 2026.01.12
[TIL] 2025-12-29 | C++에서 중요한 건 메모리, 수명, 비용  (0) 2025.12.29
[TIL] 2025-12-23 | C++ 하면서 사소한 것들  (0) 2025.12.23
'내배캠Unreal_TIL/C++' 카테고리의 다른 글
  • [TIL] 2026-01-20 | C++ int to char / char to int / int to string / string to int
  • [TIL] 2026-01-19 | C++ Set 사용
  • [TIL] 2026-01-12 | C++ 프로그래머스 행렬의 덧셈, 직사각형 별찍기, 최대공약수와 최소공배수
  • [TIL] 2025-12-29 | C++에서 중요한 건 메모리, 수명, 비용
윤윤씨
윤윤씨
🎮 내일배움캠프 Unreal 7기
  • 윤윤씨
    컴퓨터온열맛사지
    윤윤씨
  • 전체
    오늘
    어제
    • 분류 전체보기 (62)
      • 내배캠Unreal_TIL (62)
        • C++ (23)
        • UE (31)
        • 팀프로젝트 (7)
      • etc (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
    • Solved.ac
    • YouTube
  • 태그

    오토마타
    프로그래머스
    언리얼과제
    머티리얼
    STL
    챌린지
    디자인패턴
    ta
    스테이트머신
    gas
    코드카타
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.6
윤윤씨
[TIL] 2026-01-15 | C++ 캐스트(cast) 연산자
상단으로

티스토리툴바