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는 이들 중 가장 "말이 되는" 변환을 안전하게 수행하려는 연산자예요.

더 알아보기 (Learn more)

cppreference