c++ - Do pointers to string literals remain valid after a function returns? -
क्या निम्न फ़ंक्शन द्वारा पॉइंटर वापस आया है?
const char * bool2str (bool) Flg) {लौटें flg? "हाॅं नही"; }
यह दृश्य सी ++ और जी ++ में अच्छी तरह से काम करता है सी ++ मानक इस बारे में क्या कहता है?
भंडारण अवधि पर:
2.13.4 साधारण स्ट्रिंग लीटरल और यूटीएफ -8 स्ट्रिंग लीटरल को संकीर्ण स्ट्रिंग लीटरल के रूप में भी जाना जाता है। एक संकीर्ण स्ट्रिंग का शाब्दिक प्रकार "सर constitute of array" है, जहां n नीचे परिभाषित स्ट्रिंग का आकार है, और स्थिर भंडारण अवधि
3.7.1 के साथ संयोजन के रूप में पढ़ा < / P>
3.7.1।
सभी ऑब्जेक्ट्स जिनमें डायनामिक स्टोरेज अवधि नहीं है, में थ्रेड स्टोरेज अवधि नहीं है, और स्थानीय में स्थिर नहीं हैं भंडारण की अवधि इन ऑब्जेक्ट्स के लिए स्टोरेज प्रोग्राम की अवधि (3.6.2, 3.6.3) के लिए रह जाएगा।
प्रकार:
अनुलग्नक सी
उपक्लेज़ 2.13.4:
बदलें : स्ट्रिंग लीटरल्स ने कॉन्स्ट को स्ट्रिंग का प्रकार बनाया है शाब्दिक "चारों की सरणी" से "चार प्रकार की सरणी" में बदल दिया गया है। एक चार 16_t स्ट्रिंग का प्रकार "कुछ-पूर्णांक-प्रकार की सरणी" से बदलकर "चर की 166_ की सरणी" में बदल जाता है। चार 32_t स्ट्रिंग का प्रकार शाब्दिक "कुछ-पूर्णांक-प्रकार की सरणी" से बदल जाता है, "वर्ट स्ट्रॉ 32_-टी की सरणी"। एक व्यापक स्ट्रिंग के प्रकार को "wchar_t की सरणी" से बदलकर "const wchar_t की सरणी" में बदल दिया जाता है।
तर्क: यह अनुचित अतिभारित फ़ंक्शन कॉल करने से बचा जाता है, जो उम्मीद कर सकता है कि वह अपनी तर्क को संशोधित कर सके।
मूल विशेषता पर प्रभाव: अच्छी तरह से परिभाषित सुविधा के शब्दों को बदलें। रूपांतरण की कठिनाई: सरल वाक्यविन्यास परिवर्तन, क्योंकि स्ट्रिंग लीटरल को चार * में परिवर्तित किया जा सकता है; (4.2)। सबसे सामान्य मामलों को नए लेकिन बहिष्कृत मानक रूपांतरण द्वारा संभाला जाता है: char * p = "abc"; // सी में मान्य, C ++ char * q = expr में पदावनत? "एबीसी": "डी"; // वैध में सी, अमान्य में सी ++
व्यापक रूप से किस प्रकार से उपयोग किया जाता है: संभावित रूप से संशोधनीय स्मृति के लिए पॉइंटर्स के रूप में स्ट्रिंग लीटरल्स का इलाज करने के लिए उचित कारण वाले प्रोग्राम शायद दुर्लभ हैं।
गतिशील रूप से आवंटित (शब्द 'हीप' का उपयोग स्मृति के किसी क्षेत्र के संदर्भ में मानक में AFAIK में कभी नहीं किया जाता है) मेमोरी में फ़ंक्शन कॉल की आवश्यकता होती है जो कि main
स्थैतिक स्मृति के आवंटित होने के बाद बहुत कुछ।
Comments
Post a Comment