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)이어야 해요.To와From은 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에서 쓰고 싶을 때의 현대적 대안이에요.