그의 최근 강연에서 "현대 C의 유형 말장난 ++" 티무르 Doumler는 말했다 그 std::bit_cast
비트가 캐스팅에 사용할 수 없습니다 float
에 unsigned char[4]
C 스타일 배열은 함수에서 반환 할 수 없기 때문에. 우리는 std::memcpy
비슷한 것을 reinterpret_cast<unsigned char*>(&f)[i]
잘 정의 할 때 C ++ 23 (또는 그 이후 버전)을 사용 하거나 기다려야 합니다.
C ++ 20에서 우리가 사용할 수 std::array
와 함께 std::bit_cast
,
float f = /* some value */;
auto bits = std::bit_cast<std::array<unsigned char, sizeof(float)>>(f);
C 스타일의 배열 대신에 float
?
struct X { unsigned char elems[5]; };
인용 한 규칙 을 충족합니다. 최대 4 개의 요소로 목록을 초기화 할 수 있습니다. 5 개의 요소로 목록을 초기화 할 수도 있습니다. 표준 라이브러리 구현자는 실제로이 작업을 수행 할만 큼 사람들을 미워한다고 생각하지 않지만 기술적으로 적합하다고 생각합니다.