पर रावल्यू संदर्भ के पारित होने की अनुमति नहीं है हमारे पास निम्न सुविधा फ़ंक्शन है जो मानचित्र से कोई मान प्राप्त करता है या यदि नहीं मिला तो फ़ॉलबैक डिफ़ॉल्ट मान देता है।किसी फ़ंक्शन
template <class Collection> const typename Collection::value_type::second_type&
FindWithDefault(const Collection& collection,
const typename Collection::value_type::first_type& key,
const typename Collection::value_type::second_type& value) {
typename Collection::const_iterator it = collection.find(key);
if (it == collection.end()) {
return value;
}
return it->second;
}
इस समारोह के साथ समस्या यह तीसरा तर्क जो एक बग होगा के रूप में एक अस्थायी वस्तु गुजर अनुमति देता है। उदाहरण के लिए:
const string& foo = FindWithDefault(my_map, "");
यह std :: is_rvalue_reference और स्थिर ज़ोर का उपयोग करके किसी तरह से तीसरा तर्क को rvalue संदर्भ गुजर अस्वीकृत करने के लिए संभव है?
यह वास्तव में '' 'पास करने के लिए सहज महसूस करता है। 'FindWithDefault' को संदर्भ में बाध्य होने से रोकने के लिए एक तरीका खोजना बेहतर होगा, सिवाय इसके कि मुझे नहीं लगता कि एक है। वैसे भी, इस उदाहरण में बस 'foo' मान बनाना बेहतर होगा। –
इस प्रश्न के साथ दूसरी समस्या यह है कि आप समस्या को बताए जाने के बजाय समाधान के बारे में सोचते हैं। ऐसा करने में, आपने रावल संदर्भों पर ध्यान केंद्रित किया है लेकिन यह एकमात्र समस्या नहीं है; एक लालसा संदर्भ-से-'const'-अस्थायी आपको उतना ही कठिन बना देगा। शायद मूल्य से डिफ़ॉल्ट 'मान' ले लो। –
आप संदर्भ द्वारा लौटने की बजाय मूल्य से वापस आ सकते हैं। यह एक खोज के साथ डिफ़ॉल्ट के लिए काफी प्राकृतिक लगता है। – galinette