[c++] स्ट्रिंग स्थिर से 'char *' में रूपांतरण सी में मान्य क्यों है लेकिन C ++ में अमान्य है


0 Answers

यह ऐतिहासिक कारणों से सी में मान्य है। सी पारंपरिक रूप से निर्दिष्ट किया गया है कि स्ट्रिंग अक्षर का प्रकार char * बजाय const char * , हालांकि यह कहकर यह योग्यता प्राप्त हुई कि आपको वास्तव में इसे संशोधित करने की अनुमति नहीं है।

जब आप एक कास्ट का उपयोग करते हैं, तो आप अनिवार्य रूप से संकलक को बता रहे हैं कि आप डिफ़ॉल्ट प्रकार मिलान नियमों से बेहतर जानते हैं, और यह असाइनमेंट ठीक करता है।

Question

सी ++ 11 मानक (आईएसओ / आईईसी 14882: 2011) § C.1.1 में कहते हैं:

char* p = "abc"; // valid in C, invalid in C++

सी ++ के लिए यह एक स्ट्रिंग लिटलल के सूचक के रूप में ठीक है क्योंकि इसे संशोधित करने के किसी भी प्रयास से दुर्घटना हो जाती है। लेकिन यह सी में मान्य क्यों है?

सी ++ 11 भी कहता है:

char* p = (char*)"abc"; // OK: cast added

जिसका अर्थ है कि यदि पहले कथन में एक कास्ट जोड़ा जाता है तो यह मान्य हो जाता है।

कास्टिंग सी ++ में मान्य दूसरा कथन क्यों बनाता है और यह पहले से अलग कैसे है? क्या यह अभी भी हानिकारक नहीं है? यदि ऐसा है, तो मानक ने क्यों कहा कि यह ठीक है?




Related