Avatar ·

static_cast, dynamic_cast, reinterpret_cast और C++ में C-style टाइप कास्टिंग में क्या अंतर है?

सभी को नमस्ते! मैंने अभी C++ सीखना शुरू किया है और टाइप कास्टिंग को समझ नहीं पा रहा हूँ। किताबों और फ़ोरम में `static_cast`, `dynamic_cast`, `reinterpret_cast` और पुराने C-style कास्टिंग के बारे में लिखा है। जब मैं C में लिखता था, तो बस `(int)myDouble` लिखता था और सब काम करता था। लेकिन C++ में मुझे बताया जाता है कि ऐसा करना बुरा है और C++-style का उपयोग करना चाहिए। उदाहरण के लिए, मेरे पास एक class hierarchy है: ```cpp class Base { public: virtual ~Base() {} }; class Derived : public Base { public: void foo() {} }; ``` मैं `Base*` को `Derived*` में convert करना चाहता हूँ। लगता है कि `(Derived*)basePtr` लिख सकता हूँ और यह compile हो जाएगा। लेकिन क्या उपयोग करना बेहतर है? मैंने सुना है कि `dynamic_cast` `nullptr` return कर सकता है अगर कास्टिंग असफल हो, जबकि `static_cast` ऐसा नहीं करता। और `reinterpret_cast` है जो सब कुछ तोड़ देता है। मदद करें समझने में: कौन सा cast कब उपयोग करना चाहिए? क्या ऐसे मामले हैं जब C-style कास्टिंग अभी भी स्वीकार्य है? और C++ में इतने सारे अलग-अलग कास्ट क्यों बनाए गए?