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_cast나 reinterpret_cast까지 암묵적으로 수행할 수 있어서 위험해요. 의도를 명확히 하려면 의도적으로 선택된 static_cast, const_cast, reinterpret_cast, dynamic_cast를 쓰는 것이 권장돼요.
// 명확한 의도
double e = 2.7;
int x = static_cast<int>(e); // 안전한 축소 변환
명시적 형 변환은 이렇게 여러 문법으로 제공되지만, 현대 C++ 모범 사례는 각 변환의 의도를 분명히 드러내는 명명된 캐스트 연산자를 사용하는 거예요.