ในการพูดคุยล่าสุดของเขา“ชนิดเล่นสำนวนในปัจจุบัน c ++”มู Doumler กล่าวว่าstd::bit_castไม่สามารถนำมาใช้เพื่อบิตโยนfloatลงไปunsigned char[4]เพราะอาร์เรย์แบบ C ไม่สามารถกลับมาจากฟังก์ชั่น เราควรใช้std::memcpyหรือรอจนกว่า C ++ 23 (หรือหลังจากนั้น) เมื่อสิ่งที่ชอบreinterpret_cast<unsigned char*>(&f)[i]จะกลายเป็นชัดเจน
ใน 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 องค์ประกอบ ฉันไม่คิดว่าผู้ใช้งานไลบรารี่มาตรฐานจะเกลียดผู้คนมากพอที่จะทำสิ่งนี้ได้จริง แต่ฉันคิดว่ามันสอดคล้องกับทางเทคนิค