एएस 3 के वर्षों के बाद, मैं सी ++ जारी करने की कोशिश कर रहा हूं। संदर्भ अभी भी मुझे फिट कर रहे हैं।फ़ंक्शन का परिणाम संदर्भ के रूप में पारित नहीं किया जा सकता
निम्नलिखित कार्यों पर विचार करें:
#include <cstdio>
#include <list>
void f(std::list<int>& v) {
for (std::list<int>::iterator i = v.begin(); i != v.end(); ++i)
printf("Hello %d\n", *i);
}
std::list<int> get(void) {
std::list<int> list;
list.push_back(0);
return list;
}
अब, कर निम्नलिखित:
std::list<int> l = get();
f(l);
ठीक है, लेकिन f(get())
निम्नलिखित त्रुटि उत्पन्न करेगा:
"no matching function for call to 'f'", "candidate function not viable: no known conversion from `'std::list<int>' to 'std::list<int>&' for 1st argument"
क्यों कि है ? क्या ऐसा इसलिए है क्योंकि फ़ंक्शन का परिणाम अदृश्य रूप से const
है?
एक बार जब मैं क्लैंग के लिए जीसीसी के त्रुटि संदेश को पसंद करता हूं: 'त्रुटि: प्रकार 'std :: list> और' अस्थायी प्रकार से 'std के गैर-कॉन्स्ट संदर्भ का अमान्य प्रारंभिकरण: : सूची > '' –