以下のコードを検討してください。
#include <iostream>
#include <stdexcept>
using namespace std;
int i;
class A{
public:
~A(){i=10;}
};
int func1()
{
i=3;
A Ob; // -> here local object , hence created and destroyed
return i;
}
int& func2()
{
i=8;
A obj;
return i;
}
int func3()
{
i=8;
{A obj;}
return i;
}
int main()
{
cout << "i : " <<func1() << endl;
cout << "i : " <<func2() << endl;
cout << "i : " <<func3() << endl;
return(0);
}
出力:
$ ./TestCPP
i : 3
i : 10
i : 10
最初に i が 3 である理由を誰かが説明できますか? ではfunc1()
、A Ob
はローカル変数であるため、作成および破棄されます。それが破壊されると、 i を変更するデストラクタが呼び出され、 になると10
予想i
されますが10
、答えはi : 3
.