सी में, void *
किसी भी अन्य पॉइंटर प्रकार को डालने की आवश्यकता नहीं है , इसे हमेशा सुरक्षित रूप से बढ़ावा दिया जाता है। हालाँकि, C ++ में, यह मामला नहीं है। उदाहरण के लिए,
int *a = malloc(sizeof(int));
C में काम करता है, लेकिन C ++ में नहीं। (नोट: मुझे पता है कि आपको malloc
C ++ में या उस मामले के लिए उपयोग नहीं करना चाहिए new
, और इसके बजाय स्मार्ट पॉइंटर्स और / और एसटीएल को प्राथमिकता देना चाहिए; यह विशुद्ध रूप से जिज्ञासा से पूछा गया है) C ++ मानक इस अंतर्निहित कलाकारों को अनुमति क्यों नहीं देता है, जबकि सी मानक करता है?
sizeof(*a)
इसके बजाय का उपयोग करके तय किया गया है।
malloc
आवंटित किए गए प्रकार के लिए एक पॉइंटर वापस नहीं किया जा सकता है। new
क्या C ++ आवंटित प्रकार के लिए एक पॉइंटर लौटाता है, इसलिए ठीक से लिखा गया C ++ कोड कभी नहीं void *
डाला जाएगा।
void
, C नहीं था । जब उस कीवर्ड / विचार को C में जोड़ा गया, तो उन्होंने इसे C की आवश्यकताओं के अनुरूप बदल दिया। यही कारण है कि शीघ्र ही था के बाद सूचक प्रकार की जाँच की जा रही शुरू कर दिया सब पर । देखें कि क्या आप K & R C वर्णन पुस्तिका ऑनलाइन प्राप्त कर सकते हैं, या वेइट ग्रुप के C प्राइमर जैसे C प्रोग्रामिंग टेक्स्ट की एक पुरानी कॉपी । ANSI C भरा हुआ था, C ++ से बैकपोर्टेड या प्रेरित फीचर्स की, और K & R C ज्यादा सरल था। इसलिए यह अधिक सही है कि C ++ विस्तारित C के रूप में यह उस समय अस्तित्व में था, और जिस सी को आप जानते हैं वह C ++ से नीचे छीन लिया गया था।
long *a = malloc(sizeof(int));
उफ़, कोई केवल एक प्रकार बदलना भूल गया!