static_cast — static_cast
static_cast — static_cast
static_cast는 명시적 형 변환(타입 캐스트)의 한 형태예요. 컴파일 타임에 안전성이 검사되는 변환을 수행해요.
상속 관계에서의 업캐스트/다운캐스트, 숫자 타입 간 변환, void 포인터 변환 등에 사용돼요. 런타임 검사가 없는 만큼 잘못 쓰면 정의되지 않은 동작이 될 수 있어요.
출처: cppreference
본문
static_cast는 명시적 변환 연산자로, 컴파일 타임에 검사되는 타입 변환을 수행해요.
문법 (Syntax)
static_cast< new-type >( expression )
설명 (Explanation)
static_cast는 다음과 같은 변환에 사용돼요.
- 업캐스트 — 파생 클래스에서 공개/비공개/보호 기반 클래스로의 변환. 안전해요.
- 다운캐스트 — 기반 클래스에서 파생 클래스로의 변환. 만약 객체가 실제로 그 파생 타입이 아니라면 정의되지 않은 동작이 돼요.
- 수치 변환 — 정수, 부동 소수점 타입 간 변환 (예:
int에서double로) - void 포인터 변환 — 어떤 객체 포인터에서
void*로, 또는void*에서 다시 구체 타입 포인터로 - 캐스팅으로 값을 버리기 — lvalue를 xvalue로 캐스팅해 이동시키기 등
예제 (Example)
double d = 3.14;
int i = static_cast<int>(d); // 3.14 를 3 으로 (수치 변환, 버림)
struct Base {};
struct Derived : Base {};
Base* b = new Derived;
Derived* d2 = static_cast<Derived*>(b); // 다운캐스트
void* p = static_cast<void*>(&i); // int* -> void*
int* ip = static_cast<int*>(p); // void* -> int*
static_cast vs const_cast / reinterpret_cast
static_cast는 컴파일 타임에 의미가 검사되는 변환 (상속·수치 등)const_cast는 const/volatile 한정을 떼거나 붙이는 변환reinterpret_cast는 비트 패턴을 그대로 유지한 채 타입 재해석 (컴파일 타임 검사 거의 없음)
static_cast는 이들 중 가장 "말이 되는" 변환을 안전하게 수행하려는 연산자예요.