ในการพูดคุยล่าสุดของเขา“ชนิดเล่นสำนวนในปัจจุบัน 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 องค์ประกอบ ฉันไม่คิดว่าผู้ใช้งานไลบรารี่มาตรฐานจะเกลียดผู้คนมากพอที่จะทำสิ่งนี้ได้จริง แต่ฉันคิดว่ามันสอดคล้องกับทางเทคนิค