इस सवाल का पहले से ही एक उत्तर है: < / P>
- 2 जवाब
मैंने इस कोड का परीक्षण किया है:
<पूर्व> #include & lt; iostream & gt; # शामिल करें & lt; cstdio & gt; #include & lt; स्ट्रिंग & gt; नेमस्पेस एसटीडी का उपयोग करना; Int main () {string s1 ("a"), s2 ("b"); Const char * s = (s1 + s2) .c_str (); printf ( "% s \ n", रों);
यह "अब" देता है।
जहां तक मुझे पता है, क्योंकि (s1 + s2)
एक अस्थायी ऑब्जेक्ट है और किसी तरह से गायब हो जाता है (मुझे इसके बारे में कोई जानकारी नहीं है), फिर const char * s
अपरिभाषित स्मृति को इंगित कर सकता है और इसे डंप किया जा सकता है।
तो यह .c_str ()
की तरह?
यह आपके उदाहरण में सुरक्षित नहीं है। हालांकि यह सुरक्षित है
printf ("% s \ n", (a + b) .c_str ());
इसका कारण यह है कि अस्थायी मान (जैसे a + b
के परिणाम की तरह) पूर्ण अभिव्यक्ति के अंत में नष्ट हो जाते हैं आपके उदाहरण में const char *
अस्थायी और dereferencing युक्त पूर्ण अभिव्यक्ति से बचता है यह अनिर्धारित व्यवहार है।
"अपरिभाषित व्यवहार" का सबसे खराब हिस्सा यह है कि चीजें जाहिरा तौर पर वैसे काम कर सकती हैं ... (यूबी कोड केवल तभी क्रैश हो जाता है जब आप अपने अभिभावकों के सामने अपना डेमो बना रहे हों, जिसमें आपके माता-पिता शामिल हैं ;-))
Comments
Post a Comment