numeric_bit_cast

numeric_bit_cast (std::bit_cast)

<bit> 헤더에 정의되어 있어요. From의 객체 표현을 재해석해 타입 To의 값을 얻어요. 반환된 To 객체의 값 표현의 모든 비트가 from의 객체 표현의 대응 비트와 같아요. C++20부터 도입됐어요.

출처: cppreference

본문

template< class To, class From >
constexpr To bit_cast( const From& from ) noexcept;

(C++20부터)

From의 객체 표현을 재해석해 타입 To의 값을 얻어요. 반환된 To 객체의 값 표현의 모든 비트가 from의 객체 표현의 대응 비트와 같아요. 패딩 비트의 값은 미지정이에요.

다음 조건을 만족해야 해요. 그렇지 않으면 프로그램은 ill-formed예요.

  • sizeof(To) == sizeof(From)이어야 해요.
  • ToFrom은 TriviallyCopyable 타입이어야 해요.
  • To에 대해 std::is_trivially_copyable_v<To>std::is_trivially_copyable_v<From>이 모두 true여야 해요.

예제

#include <bit>
#include <cstdint>
#include <cstring>
#include <iostream>

int main()
{
    // double 을 bit_cast 로 uint64_t 로 재해석
    double d = 1.0;
    std::uint64_t bits = std::bit_cast<std::uint64_t>(d);
    std::cout << std::hex << bits << '\n';   // 0x3ff0000000000000
}

reinterpret_cast와 달리 bit_cast는 객체 수명 문제·정렬 위험 없이 안전하게 비트 패턴을 복사해 재해석해요. std::memcpy를 constexpr에서 쓰고 싶을 때의 현대적 대안이에요.

더 알아보기 (Learn more)

cppreference