c++ - Full-expression boundaries and lifetime of temporaries -


संभव डुप्लिकेट:

यह कहा जाता है कि अस्थायी चर पूर्ण-अभिव्यक्ति के मूल्यांकन में अंतिम चरण के रूप में नष्ट हो जाते हैं, उदा।

  बार (foo ()। C_str ());   

अस्थायी पॉइंटर रहता है जब तक कि बार रिटर्न नहीं होता है, लेकिन

  बाज़ (बार (foo () (cf) (cistr ()) के लिए क्या होता है;   

क्या यह अभी भी रहता है जब तक कि बार रिटर्न, या बज़ रिटर्न का अर्थ पूर्ण अभिव्यक्ति अंत में होता है, कंपलर मैं बाज़ रिटर्न के बाद ऑब्जेक्ट को नष्ट करने की कोशिश करता था, लेकिन क्या मैं उस पर भरोसा कर सकता हूं? < / Div>

अस्थायी जीवन पूर्ण अभिव्यक्ति के अंत तक जीवन जिसमें वे बनाए जाते हैं एक "पूर्ण अभिव्यक्ति" एक अभिव्यक्ति है जो किसी अन्य अभिव्यक्ति का उप-अभिव्यक्ति नहीं है

में बाज़ (बार (...)); , बार (...) baz (.. के एक subexpression है ।) , जबकि बाज़ (...) कुछ भी नहीं एक subexpression है इसलिए, बाज़ (...) पूर्ण अभिव्यक्ति है, और इस अभिव्यक्ति के मूल्यांकन के दौरान बनाए गए सभी अस्थायी संदेशों को baz (...) के बाद तब तक नहीं हटाया जाएगा ।

Comments