मान लें कि हम इस स्थितिक्या आरवीओ इस स्थिति पर लागू है?
std::string v_1()
{
return "name";
}
std::string test = v_1();
RVO यहां लागू किया है है? मुझे लगता है कि उत्तर नहीं है, क्योंकि आरवीओ को लागू करने के नियम एक हैं: "यदि कोई फ़ंक्शन किसी वर्ग प्रकार को मान द्वारा देता है, और वापसी कथन की अभिव्यक्ति स्वचालित भंडारण अवधि के साथ एक गैर-अस्थिर वस्तु का नाम है, जो नहीं है फ़ंक्शन पैरामीटर, या कैच क्लॉज पैरामीटर, और जिसमें फ़ंक्शन के रिटर्न प्रकार के रूप में एक ही प्रकार (शीर्ष-स्तर सीवी-योग्यता को अनदेखा करना) है, फिर प्रतिलिपि/स्थान छोड़ा गया है " और इस स्थिति में लौटाई गई वस्तु में फ़ंक्शन के रिटर्न प्रकार का एक ही प्रकार नहीं है, लेकिन मैं 100% नहीं हूं कि आरवीओ यहां लागू नहीं है।
बहुत बहुत धन्यवाद।
पीएस। इस बात पर https://www.youtube.com/watch?v=AKtHxKJRwp4 (मिनट 40, दूसरा 18) माइक्रोसॉफ्ट से स्टीफन, ऐसी परिस्थिति के बारे में बात करता है जहां आरवीओ लागू नहीं किया जा सकता है क्योंकि फ़ंक्शन का रिटर्न प्रकार लौटा हुआ ऑब्जेक्ट के प्रकार से अलग होता है (उसके उदाहरण में एक युगल बनाम एक जोड़ी)। मुझे लगता है कि वही सिद्धांत यहां लागू होता है।
यह ज्यादातर 'वापसी std :: string (" name ")' – Jarod42
वापस लौटाया जाता है * नहीं * 'const *' const * ' – user268396
@ user268396 आप सही हैं लेकिन अधिकांश में मामले (यहां भी) यह स्ट्रिंग में कनवर्ट करने से पहले एक में परिवर्तित हो गया है ... :) –