अधिक भार निम्न कोड में:सी ++ nonconst-स्थिरांक संदर्भ समारोह
int foo(const int& f) //version 1
{
int g = f;
return int(foo(g)); // calls itself, turning into SO
}
int& foo(int& f) //version 2
{
f *= -1;
return f;
}
int main()
{
int f = 11;
cout << foo(f) << endl;
cout << foo(22) << endl;
}
पहले अदालत प्रिंट -11 की उम्मीद के रूप में; एफ lvalue है, इसलिए यह foo के दूसरे संस्करण से जुड़ा हुआ है (हालांकि यह 1 संस्करण के साथ भी बाध्य हो सकता है, दूसरा संस्करण यह एक बेहतर मैच है)।
foo
का दूसरा कॉल पैरामीटर के रूप में एक रैवल्यू का उपयोग कर रहा है, इसलिए foo
का एकमात्र व्यवहार्य संस्करण पहला है। अब तक सब ठीक है. foo
के पहले संस्करण के अंदर, मैंने पैरामीटर की प्रति बना दी ताकि मैं दूसरे संस्करण को कॉल कर सकूं (lvalue के साथ) और foo
के दूसरे संस्करण की कॉल के बाद इसकी एक प्रति वापस कर दें। बात यह है कि यह एक ढेर अतिप्रवाह में बदल जाएगा; अभी भी foo
का पहला संस्करण कहा जाएगा।
क्या कोई मुझे बता सकता है कि ऐसा क्यों होता है? पैरामीटर के रूप में पारित होने पर foo
के दूसरे संस्करण से जुड़ने के लिए foo
के पहले संस्करण के अंदर g
की अपेक्षा की जाएगी।
पहले 'foo' को दूसरे' foo' के बारे में कैसे पता चलेगा? –