मैं वर्तमान में सी ++ पढ़ रहा हूं, और मैंने पढ़ा है कि संदर्भ द्वारा वापसी का उपयोग करते समय मुझे यह सुनिश्चित करना चाहिए कि मैं एक चर के संदर्भ को वापस नहीं कर रहा हूं जो फ़ंक्शन लौटने पर गुंजाइश से बाहर हो जाएगा।एक स्वचालित चर काम के संदर्भ को वापस क्यों करता है?
तो Add
में क्यों कार्य करें cen
संदर्भ द्वारा वापस किया गया है और कोड सही तरीके से काम करता है ?!
#include <iostream>
using namespace std;
class Cents
{
private:
int m_nCents;
public:
Cents(int nCents) { m_nCents = nCents; }
int GetCents() { return m_nCents; }
};
Cents& Add(Cents &c1, Cents &c2)
{
Cents cen(c1.GetCents() + c2.GetCents());
return cen;
}
int main()
{
Cents cCents1(3);
Cents cCents2(9);
cout << "I have " << Add(cCents1, cCents2).GetCents() << " cents." << std::endl;
return 0;
}
मैं Win7 से अधिक codeblocks आईडीई उपयोग कर रहा हूँ:
यहाँ कोड है।
क्योंकि यह अपरिभाषित व्यवहार है, यह ठीक काम करने के लिए प्रतीत होता है लेकिन फिर बाद में तोड़ सकता है, इस पर भरोसा नहीं किया जा सकता है। –
क्या हो रहा है (फिर, यूबी के साथ, कुछ भी चला जाता है) यह है कि जब से आप 'एड' कहलाते हैं, तो आपने कुछ और नहीं कहा है, कुछ भी अभी तक स्मृति के टुकड़े को ओवरराइड नहीं किया गया है, जहां 'सीन' था, और इसलिए पुराना मूल्य अभी भी है। कहा जा रहा है, आप हमेशा उस पर भरोसा नहीं कर सकते हैं। –
उन दोनों टिप्पणियों का शायद उत्तर –