目前,我正在閱讀有關C++,和我讀了使用引用返回時,我應該確保我不是一個變量,走出去的範圍時,函數返回的迴歸。爲什麼返回一個自動變量工作的引用?
那麼爲什麼在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;
}
我使用的代碼塊IDE對Win7。
因爲它是不確定的行爲,它可以顯示工作正常,但再破以後,它不能依賴。 –
什麼可能發生的(再次,與UB,任何事情都會發生)是因爲你所謂的後'Add',你也沒有告訴其他任何東西,什麼都還沒有覆蓋的一片內存,'cen'了,所以老價值仍然存在。這就是說,你不能依賴那種總是發生的事情。 –
這兩個註釋應該可能是答案 –