इस उदाहरण पर विचार, जहां आधार वर्ग कुछ डेटा सदस्य हैं, जबकि ली गई एक ही एक अतिरिक्त तरीका प्रदान करता है:क्या यह डाउनकास्टिंग अपरिभाषित है?
struct TestBase
{
int x;
TestBase() : x(5) {}
};
struct TestDerived : public TestBase
{
void myMethod()
{
x=8;
}
};
int main()
{
TestBase b;
TestDerived& d=static_cast<TestDerived&>(b);
d.myMethod();
}
यह गलत प्रकार के downcasting है, इसलिए AFAIU यह व्यवहार अपरिभाषित है। लेकिन क्या ऐसे मामलों में शायद कुछ अपवाद हैं, जहां व्युत्पन्न वर्ग का लेआउट बेस क्लास के समान है? यदि आप असंगत प्रकार के बीच कास्ट करने के लिए प्रयास
'टेस्टडेरिव'/'टेस्टबेस' एक मानक लेआउट प्रकार है, जिससे बहुत अच्छी गारंटी मिलनी चाहिए कि यह काम करेगा। हालांकि, यह कानूनी है या नहीं, इस सवाल का जवाब नहीं देता है। – MicroVirus
शायद यह प्रश्न का उत्तर देता है: [दो समान वर्गों के पॉइंटर्स के बीच कास्टिंग की सुरक्षा?] (Http://stackoverflow.com/questions/7762929/safety-of-casting-between-pointers-of-two-identical-classes) – MicroVirus
या शायद यहां: [लगभग पॉड डेटा के लिए reinterpret_cast (लेआउट-संगतता पर्याप्त है)] (http://stackoverflow.com/questions/5060879/reinterpret-cast-for-almost-pod-data-is-layout-compatibility- पर्याप्त) – MicroVirus