explicit_cast — 명시적 형 변환

explicit_cast — 명시적 형 변환 (Explicit type conversion)

**명시적 형 변환(explicit type conversion)**은 명시적 변환과 암묵적 변환의 조합으로 타입 사이를 변환하는 문법이에요.

C 스타일 캐스트, 함수형 캐스트, 유니폼 초기화 캐스트, 그리고 typename 기반 캐스트가 여기에 해당해요.

출처: cppreference

본문

문법 (Syntax)

( type-id ) unary-expression                               // (1) C 스타일 캐스트
simple-type-specifier ( expression-list )                  // (2) 함수형 캐스트
simple-type-specifier { initializer-list }                 // (3) 유니폼 초기화 캐스트
simple-type-specifier { designated-initializer-list }      // (4)
typename identifier ( initializer-list )                   // (5)
typename identifier { initializer-list }                   // (6)
typename identifier { designated-initializer-list }        // (7)

C 스타일 캐스트(1)는 문맥에 따라 const_cast, static_cast, static_cast 다음 const_cast, reinterpret_cast, reinterpret_cast 다음 const_cast 중 하나로 해석돼요. 어느 것이 쓰일지는 캐스트되는 타입과 대상 타입에 따라 달라져요. reinterpret_cast를 암묵적으로 포함하므로, 서로 관련 없는 포인터 타입 사이 변환도 허용될 수 있어요.

double d = 3.14;
int n = (int)d;            // C 스타일 캐스트
int m = int(d);            // 함수형 캐스트
int k = int{d};            // 유니폼 초기화 캐스트

C 스타일 캐스트와 함수형 캐스트는 편리하지만, 종종 const_castreinterpret_cast까지 암묵적으로 수행할 수 있어서 위험해요. 의도를 명확히 하려면 의도적으로 선택된 static_cast, const_cast, reinterpret_cast, dynamic_cast를 쓰는 것이 권장돼요.

// 명확한 의도
double e = 2.7;
int x = static_cast<int>(e);   // 안전한 축소 변환

명시적 형 변환은 이렇게 여러 문법으로 제공되지만, 현대 C++ 모범 사례는 각 변환의 의도를 분명히 드러내는 명명된 캐스트 연산자를 사용하는 거예요.

더 알아보기 (Learn more)

cppreference