इस रूपांतरण सुरक्षितपॉइंटर्स के वेक्टर से कास्ट पॉइंटर्स के वेक्टर तक कास्ट पुन: परिभाषित किया गया है?
vector<int*> a;
const vector<const int*>& b = reinterpret_cast<const vector<const int*>&>(a);
एक स्थिर डाली स्पष्ट रूप से काम नहीं करता है इस मामले में प्रकार क्योंकि टेम्पलेट तर्क बदल रहा है है। लेकिन इसे कास्ट करके दोबारा डालने के द्वारा, मैं केवल उसी प्रकार के लिए स्थिरता जोड़ रहा हूं। तो क्या यह सभी व्यावहारिक उद्देश्यों के लिए सुरक्षित होना चाहिए?
एक तरीका यह है कि यह वास्तविक रूप से गलत हो सकता है (हालांकि मैंने परीक्षण द्वारा इसकी पुष्टि नहीं की है) सख्त अलियासिंग है। ऑप्टिमाइज़र यह मानने का हकदार है कि 'बी' उसी स्मृति को 'ए' के रूप में संदर्भित नहीं करता है (क्योंकि इसमें एक प्रकार है जो एलियासिंग के लिए संगत नहीं है)। फिर ऑप्टिमाइज़र अपनी चाल चलाएगा, और आपको लगता है कि यह चीजों को फिर से ऑर्डर या एलिइड करता है कि अगर वह 'ए' और' बी '* वैध रूप से * उसी स्मृति को संदर्भित करता है तो वह फिर से ऑर्डर या एलिइड नहीं करेगा। तो, समान लेआउट एक आवश्यक है लेकिन इसके लिए "काम" करने के लिए पर्याप्त शर्त नहीं है। –
इसे देखने का एक और तरीका यह है कि किसी संदर्भ या सूचक प्रकार के लिए 'reinterpret_cast' का परिणाम * मौलिक रूप से * बेकार है और मूल प्रकार में परिवर्तित करने के अलावा किसी अन्य चीज़ के लिए काम नहीं करता है, जब तक कि (ए) गंतव्य प्रकार वस्तु के वास्तविक प्रकार को अलियासिंग के लिए कानूनी है, या (बी) आपके पास अपने कार्यान्वयन से कुछ विशेष आश्वासन है कि यह आपके द्वारा की जा रही विशिष्ट चीज़ का समर्थन करता है। जब कोई भी लागू नहीं होता है, तो किसी ऑब्जेक्ट को किसी अन्य प्रकार के माध्यम से संदर्भित न करें। ऐसा करने के लिए "टाइप-पनिंग" भी कहा जाता है। –