explicit cast

캐스팅 연산자는 변환의 이유를 이름으로 드러낸다

C 스타일 캐스트는 “바꿔라”만 말하지만, C++ 캐스트는 숫자 변환인지, 런타임 타입 확인인지, const 조정인지까지 코드에 남깁니다.

static_cast

static_cast<double>(total)

숫자 변환처럼 컴파일 시점에 관계가 분명한 변환에 쓴다.

dynamic_cast

dynamic_cast<Derived*>(p)

상속 계층에서 실제 객체 타입 확인이 필요한 다운캐스트에 쓴다.

const_cast

const_cast<char*>(p)

API 경계에서 const 속성만 조정해야 할 때 제한적으로 쓴다.

reinterpret_cast

reinterpret_cast<T*>(raw)

비트 패턴을 다른 타입처럼 재해석한다. 일반 코드에서는 피한다.

C 스타일 캐스트는 여러 종류의 위험한 변환을 한 문법으로 숨기므로, 실제 C++ 코드에서는 의도가 드러나는 캐스트를 우선한다.
숫자 계산 보정은 대부분 static_cast에서 시작하고, 나머지 캐스트는 목적이 분명할 때만 사용한다.