क्या एक स्थानीय चर लौटाने से एक प्रतिलिपि वापस आ जाती है और मूल (एनआरवीओ) नष्ट हो जाता है?
परिचय:
प्रश्न C में स्थानीय चर लौटाने के व्यवहार की जांच करता है। विशेष रूप से, यह पता लगाता है कि लौटाई गई वस्तु एक प्रतिलिपि है या मूल वस्तु, और यह स्थानीय चर के विनाश को कैसे प्रभावित करती है।
रिटर्न वैल्यू ऑप्टिमाइज़ेशन (एनआरवीओ):
साथ में एनआरवीओ (नाम रिटर्न वैल्यू ऑप्टिमाइजेशन) सक्षम है, कंपाइलर अनावश्यक प्रतिलिपि निर्माण या स्थानीय चर के विनाश से बचने के लिए रिटर्न स्टेटमेंट को अनुकूलित करता है। यह लक्ष्य भंडारण में सीधे रिटर्न ऑब्जेक्ट का निर्माण करके, मध्यवर्ती प्रतियों या चालों के ओवरहेड को समाप्त करके इसे प्राप्त करता है। एनआरवीओ तब लागू होता है जब विशिष्ट शर्तें पूरी होती हैं, जैसे कि स्थानीय चर में स्वचालित भंडारण अवधि होती है और रिटर्न प्रकार के समान प्रकार होता है।
एनआरवीओ सक्षम के साथ उदाहरण:
इस पर विचार करें निम्नलिखित कोड:
class Test { public: Test(int p) { std::coutएनआरवीओ सक्षम होने पर, आउटपुट होगा:
Constructor called Destructor calledइस मामले में, एनआरवीओ रिटर्न स्टेटमेंट को अनुकूलित करता है और ऑब्जेक्ट ओ को सीधे स्थानीय वेरिएबल टी के लिए स्टोरेज में बनाता है। कंस्ट्रक्टर को एक बार कॉल किया जाता है, और ऑब्जेक्ट ओ के लिए केवल एक डिस्ट्रक्टर को कॉल किया जाता है। कंस्ट्रक्टर कंपाइलर ध्वज। एनआरवीओ के बिना, कंपाइलर प्रतिलिपि निर्माण और विनाश के चरणों को स्पष्ट रूप से निष्पादित करेगा।
कंस्ट्रक्टर को बुलाया गया कंस्ट्रक्टर को बुलाया गया विध्वंसक को बुलाया गया डिस्ट्रक्टर को बुलाया जाता हैइस मामले में, कंस्ट्रक्टर को दो बार कॉल किया जाता है (स्थानीय वेरिएबल टी और रिटर्न ऑब्जेक्ट ओ के लिए)। इसके अतिरिक्त, स्थानीय वेरिएबल टी और रिटर्न ऑब्जेक्ट ओ दोनों को अलग-अलग नष्ट कर दिया जाता है। एनआरवीओ सक्षम होने पर, स्थानीय चर को अनुकूलित किया जाता है, और रिटर्न ऑब्जेक्ट के लिए कंस्ट्रक्टर और डिस्ट्रक्टर को केवल एक बार बुलाया जाता है। एनआरवीओ के बिना, कॉपी निर्माण और विनाश के चरण स्पष्ट रूप से निष्पादित किए जाते हैं, संभावित रूप से कंस्ट्रक्टर और डिस्ट्रक्टर को कई बार लागू किया जाता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3