language_reinterpret_cast

language_reinterpret_cast (reinterpret_cast 캐스팅)

기본 비트 패턴을 재해석해 타입 사이를 변환해요. static_cast와 달리 컴파일 타임 지시어처럼 동작하며, 인자 값을 그대로 두고 타입만 바꿔 취급해요.

출처: cppreference

본문

문법

reinterpret_cast< target-type >( expression )

타입 target-type의 값을 돌려줘요.

설명

static_cast와 달리, const_cast처럼 reinterpret_cast 표현식은 CPU 명령어로 컴파일되지 않아요(정수와 포인터 간 변환이나, 포인터 표현이 타입에 의존하는 특이한 아키텍처에서 포인터 간 변환은 예외). 주로 expression을 마치 target-type 타입인 것처럼 취급하라고 컴파일러에 지시하는 컴파일 타임 지시어예요.

const(또는 volatile)을 제거하는 변환이 아니라면 reinterpret_cast로 할 수 있는 변환은 다음과 같아요.

    1. 정수·열거·포인터·멤버 포인터 타입의 표현식을 자기 자신의 타입으로 변환할 수 있어요. 결과 값은 expression의 값과 같아요.
    1. 포인터를 자신의 타입의 모든 값을 담을 수 있을 만큼 큰 정수 타입(예: std::uintptr_t)으로 변환할 수 있어요.
    1. 정수·열거 타입의 값을 포인터 타입으로 변환할 수 있어요. 충분히 큰 정수로 변환했다가 다시 같은 포인터 타입으로 되돌리면 원래 값이 보장돼요. 그렇지 않으면 결과 포인터는 안전하게 역참조할 수 없어요. 널 포인터 상수 NULL이나 정수 0이 널 포인터를 만든다는 보장은 없어요.

reinterpret_cast는 원하는 비트 패턴을 유지한 채 타입을 재해석하는 강력하지만 위험한 도구예요. 실제 객체 수명(lifetime)과 정렬(alignment) 요구사항을 위반하면 미정의 동작이 될 수 있어요. 메모리 재해석보다는 std::bit_caststd::memcpy가 더 안전한 경우가 많아요.

더 알아보기 (Learn more)

cppreference