उनकी हाल ही वार्ता में "आधुनिक सी में टाइप punning ++" तैमूर Doumler कहा कि std::bit_cast
करने के लिए थोड़ा और एक डाली नहीं किया जा सकता float
एक में unsigned char[4]
क्योंकि सी शैली सरणियों एक समारोह से वापस नहीं किया जा सकता है। हमें या तो std::memcpy
C ++ 23 (या बाद में) तक का उपयोग करना चाहिए या करना चाहिए जब कुछ reinterpret_cast<unsigned char*>(&f)[i]
अच्छी तरह से परिभाषित हो जाएगा।
सी ++ 20 में, हम एक का उपयोग कर सकते std::array
के साथ std::bit_cast
,
float f = /* some value */;
auto bits = std::bit_cast<std::array<unsigned char, sizeof(float)>>(f);
के बजाय एक सी शैली सरणी बाइट्स पाने के लिए float
?
struct X { unsigned char elems[5]; };
आप जिस नियम का हवाला दे रहे हैं उसे संतुष्ट करता है। यह निश्चित रूप से 4 तत्वों के साथ सूची-आरंभीकृत किया जा सकता है। यह कर सकते हैं भी सूची-प्रारंभ 5 तत्वों के साथ हो सकता है। मुझे नहीं लगता कि किसी भी मानक पुस्तकालय कार्यान्वयनकर्ता को वास्तव में ऐसा करने के लिए लोगों से बहुत नफरत है, लेकिन मुझे लगता है कि यह तकनीकी रूप से अनुरूप है।