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 |