핵심 요약
NAVER D2의 기술 블로그가 std::bit_cast와 reinterpret_cast의 의미와 사용 시기를 정리했습니다. 비트 패턴 재해석은 value-to-value에 한정해 안전하게 수행되며, 포인터/정수 변환에는 reinterpret_cast가 적합하다는 결론을 제시합니다.
구현 방법
- std::bit_cast: sizeof(From) == sizeof(To), From과 To가 모두 trivially copyable일 때만 사용, constexpr 가능, memcpy와 동일한 비트 복사 의미론
- reinterpret_cast: 포인터 간 타입 변환 및 포인터/정수 간 변환에 사용, 역참조 시 엄격한 앨리어싱 규칙 위반 가능성 주의
- 주의점: 비트 캐스트를 포인터에 적용하면 앨리어싱/상수성 우회 함정에 빠질 수 있음; 포인터 변환에는 항상 규칙 준수 필요
주요 결과
- 비트 패턴 재해석은 memcpy로 구현되며 현대 컴파일러가 호출을 제거해 최적화 가능
- 의도와 한계를 명확히 구분하는 것이 안전한 캐스팅의 핵심
