ले जाएं semantics उपयोगी हो सकता है जब संकलक RVO और NRVO का उपयोग नहीं कर सकता है। लेकिन किस मामले में कंपाइलर इन सुविधाओं का उपयोग नहीं कर सकता?जब कोई कंपाइलर आरवीओ या एनआरवीओ का उपयोग नहीं कर सकता है?
उत्तर
उत्तर यह है कि यह संकलक और स्थिति निर्भर है। जैसे नियंत्रण प्रवाह शाखाकरण अनुकूलकों को भ्रमित कर सकता है। Wikipedia इस उदाहरण दे:
#include <string>
std::string f(bool cond = false) {
std::string first("first");
std::string second("second");
// the function may return one of two named objects
// depending on its argument. RVO might not be applied
return cond ? first : second;
}
int main() {
std::string result = f();
}
ठीक है, यह इतना नहीं है कि संकलक आरवीओ का उपयोग कर सकता है, लेकिन क्या यह एक प्रति निर्माण निर्माण से बच सकता है।
पर विचार करें:
struct Blah
{
int x;
Blah(int const _x): x(_x) { cout << "Hum de dum " << x << endl; }
};
Blah foo()
{
Blah const a(1);
if(fermatWasRight()) { return Blah(2); }
return a;
}
दुष्प्रभाव (निर्माता से उत्पादन) यहीं हो रही है, भंडारण में a
directy फोन करने वाले द्वारा प्रदान की निर्माण के साथ बहुत असंगत पहली नजर में है। लेकिन अगर संकलक पर्याप्त स्मार्ट है तो यह ध्यान दे सकता है कि इस ऑब्जेक्ट को नष्ट करना एक शून्य ऑपरेशन है। और अधिक आम तौर पर, किसी विशेष स्थिति के लिए, यदि संकलक पर्याप्त स्मार्ट है तो शायद यह एक प्रतिलिपि ऑपरेशन से बचने के लिए प्रबंधन कर सकता है इससे कोई फर्क नहीं पड़ता कि हम कोड को कैसे डिजाइन करते हैं।
मुझे औपचारिकता के बारे में निश्चित नहीं है, लेकिन उपरोक्त, ऑब्जेक्ट में अधिक पेलोड के साथ, ताकि प्रतिलिपि अधिक महंगा हो, एक ऐसा मामला है जहां चलने वाले अर्थशास्त्र मदद कर सकते हैं, ताकि ऑप्टिमाइज़ेशन की गारंटी हो कंपाइलर के स्मारक (या नहीं)।
- 1. क्या ऑब्जेक्ट कॉपी किया गया है या नहीं जब आरवीओ/एनआरवीओ किक करता है?
- 2. आरवीओ/एनआरवीओ और सार्वजनिक अपरिभाषित प्रतिलिपि निर्माता
- 3. जब कोई कंपाइलर टेम्पलेट पैरामीटर का अनुमान लगा सकता है?
- 4. क्या सी ++ कंपाइलर एक कॉन्स रिटर्न वैल्यू के लिए आरवीओ कर सकता है?
- 5. कंपाइलर कंसोल आउटपुट का उत्पादन नहीं कर सकता
- 6. मैं कैसे जांच सकता हूं कि प्रतिबिंब का उपयोग कर कोई विधि स्थिर है या नहीं?
- 7. आरवीओ की अनुमति है जब एक प्रतिलिपि निजी है और लागू नहीं किया गया है?
- 8. कैसे जांचें कि कोई ईवेंट हैंडलर jQuery या JS का उपयोग कर मौजूद है या नहीं?
- 9. क्या मैं या एंड का उपयोग नहीं कर सकता?
- 10. सर्वर का उपयोग नहीं कर सकता। मैपपाथ
- 11. पिइप कंपाइलर का उपयोग
- 12. मैं शून्य के लिए जेनेरिक का परीक्षण क्यों कर सकता हूं जब यह शून्य नहीं हो सकता है या कोई ऑब्जेक्ट नहीं हो सकता है?
- 13. कोई एप्लिकेशन .NET या Java में एकाधिक कोर या CPU का उपयोग कैसे कर सकता है?
- 14. सीएमएस का उपयोग करना है या नहीं
- 15. जब सुरक्षा कोई मुद्दा नहीं है तो memset() या ZeroMemory() के बजाय SecureZeroMemory() का उपयोग करने का कोई कारण?
- 16. iBatis कोई पॉप नहीं है जब कोई पंक्ति नहीं है
- 17. कंपाइलर एक गुणा में एक अनुमानित अतिरिक्त लूप को अनुकूलित क्यों नहीं कर सकता (या नहीं)?
- 18. कोई अपवाद प्रकार का उपयोग करने के लिए जब कोई संपत्ति शून्य नहीं हो सकती है?
- 19. टाइम्स जब इनलाइन फ़ंक्शनिंग का उपयोग नहीं किया जा सकता
- 20. नॉकआउट दृश्य अपडेट नहीं कर रहा है, जब कोई टेम्पलेट $
- 21. वर का उपयोग करना या वर का उपयोग नहीं कर
- 22. क्या कोई जाली और ggplot2 भूखंडों में बहुभुज() या समकक्ष का उपयोग कर सकता है?
- 23. पैरामीटर लौटने पर आरवीओ क्यों अस्वीकृत है?
- 24. क्यूटी - QWidget: जब कोई जीयूआई उपयोग नहीं किया जा रहा है तो QWidget नहीं बना सकता
- 25. अगर कोई पर्ल का उपयोग नहीं कर रहा है तो मैं निर्देशिका कैसे बना सकता हूं?
- 26. जब उपयोग करने के लिए!() या! = जब नहीं तो अशक्त
- 27. खंड में अस्थायी कॉलम का उपयोग नहीं कर सकता है?
- 28. मैं स्ट्रेरर का उपयोग क्यों नहीं कर सकता?
- 29. रोकथाम ओवरराइटिंग जब बचाने() या save.image() का उपयोग कर
- 30. क्या मैं निर्धारित कर सकता हूं कि कोई KeyEventArg एक अक्षर या संख्या है या नहीं?
चेक इस सवाल: [सी ++: "लौटने" बयान के साथ प्रतिलिपि बचना] (http://stackoverflow.com/questions/10476665/c-avoiding-copy-with-the- वापसी-बयान) :) – LihO