यह उस मामले में केवल समस्याग्रस्त है जहां प्रारंभकर्ता एक फ़ंक्शन कॉल है जो एक अल्पकालिक रावल्यू संदर्भ देता है। कम शब्दों और अधिक कोड के साथ:
// Fine; lifetime extension applies!
auto&& ref = 42;
auto id = [](int&& i) -> int&& { return std::move(i); };
auto&& uhoh = id(42);
// uhoh is now a stale reference; can't touch it!
इसके विपरीत, auto uhoh = id(42);
ठीक काम किया होता।
आपके मामले में, क्योंकि std::make_tuple
एक मूल्य देता है और एक रैल्यू संदर्भ नहीं है कोई समस्या नहीं है।
मेरा मानना है कि असली खतरा उन कार्यों और फ़ंक्शन टेम्पलेट्स से है जो रावल्यू संदर्भ पैरामीटर के साथ हैं और जो कुछ उप-प्रोजेक्ट्स के लिए एक रावल्यू संदर्भ देता है जो जीवनकाल उन पर निर्भर करता है। (ऐसा कहा जा रहा है, auto&& ref = std::move(42);
जितना सरल है समस्या को प्रदर्शित करता है!)
स्थिति सी ++ 11 से पूरी तरह से नई नहीं है, इस पर विचार करें: T const& ref = bar(T_factory());
।
स्रोत
2013-02-13 08:39:47
एक संदर्भ एक संदर्भ है। –
'ऑटो और& var = func()', http://stackoverflow.com/questions/13618506/is-it-possible-to-stdmove-objects-out-of-functions-c11/13618587#13618587 – billz
@billz के संबंध में लिंक एक अलग मामला है जहां यह संदर्भ के रूप में स्थानीय चर लौटा रहा है। बग फ़ंक्शन के अंदर है जहां इसे कहा जाता है। – balki