c++ - Life Scope of Temporary Variable -
#include & lt; cstdio & gt; #include & lt; स्ट्रिंग & gt; शून्य मज़ा (const char * c) {printf ("- & gt;% s \ n", c); } Std :: string get () {std :: string str = "हैलो वर्ल्ड"; वापसी str; } Int main () {const char * cc = get ()। C_str (); // सीसी इस बिंदु पर मान्य नहीं है जैसा कि यह // अस्थायी स्ट्रिंग आंतरिक बफर की ओर इशारा करता है, और अस्थायी स्ट्रिंग // पहले से ही इस बिंदु पर नष्ट कर दिया गया है। मज़ा (सीसी); // लेकिन मुझे आश्चर्य है कि यह कॉल वैध परिणाम देगा। // ऐसा लगता है कि लौटा अस्थायी स्ट्रिंग // के दायरे में वैध है (...) // मेरी समझ क्या है, गुंजाइश का मतलब है {...} // क्या यह मान्य व्यवहार गारंटी सी ++ मानक है? या यह आपके कम्पाइलर विक्रेता कार्यान्वयन पर निर्भर करता है? मज़ा (मिल () c_str ()।); getchar (); }
आउटपुट है:
- & gt; - & gt; हैलो वर्ल्ड
हैलो, क्या मैं जानता हूँ कि सही व्यवहार सी ++ मानक की गारंटी है, या यह आपके कंपाइलर विक्रेता लागूकरण पर निर्भर करता है? मैंने VC2008 और VC6 के तहत इसका परीक्षण किया है। दोनों के लिए ठीक काम करता है।
देखें। मानक गारंटी देता है कि अभिव्यक्ति के अंत तक एक अस्थायी जीवन रहता है, जिसमें यह एक हिस्सा है। चूंकि पूरे फ़ंक्शन आविर्भाव अभिव्यक्ति है, अस्थायी रूप से कार्य आवण अभिव्यक्ति के अंत के बाद तक जारी रहने की गारंटी दी जाती है जिसमें यह एक हिस्सा है।
Comments
Post a Comment