मुझे समझ नहीं नहीं जब मैं std::move
का उपयोग करना चाहिए और जब मैं संकलक का अनुकूलन देना चाहिए ... उदाहरण के लिए:सी ++ 11 रिटर्न मूल्य अनुकूलन या स्थानांतरित करें?
using SerialBuffer = vector< unsigned char >;
// let compiler optimize it
SerialBuffer read(size_t size) const
{
SerialBuffer buffer(size);
read(begin(buffer), end(buffer));
// Return Value Optimization
return buffer;
}
// explicit move
SerialBuffer read(size_t size) const
{
SerialBuffer buffer(size);
read(begin(buffer), end(buffer));
return move(buffer);
}
कौन सा उपयोग करना चाहिए?
जो मैंने अभी तक पढ़ा है, उससे सामान्य सहमति आम तौर पर 'चाल' के बजाय आरवीओ का उपयोग करके संकलक पर निर्भर करती है: आधुनिक कंपेलर आरवीओ का उपयोग करने के लिए काफी स्मार्ट हैं और यह 'चाल' से अधिक कुशल है। लेकिन यह सिर्फ "सुनवाई" है, आपको दिमाग है, इसलिए मुझे एक दस्तावेजी स्पष्टीकरण में काफी दिलचस्पी है। – syam
आपको स्थानीय परिवर्तनीय फ़ंक्शन रिटर्न मान के लिए कभी भी स्पष्ट स्थान की आवश्यकता नहीं है। यह निहित कदम है। –
संकलक तब चुनने के लिए स्वतंत्र है: यदि यह संभव है, तो यह आरवीओ का उपयोग करेगा और यदि नहीं, तो यह अभी भी एक कदम उठा सकता है (और यदि प्रकार के लिए कोई कदम संभव नहीं है, तो यह एक प्रतिलिपि करेगा)। –