考虑下面的代码:
#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 吗?In func1()
,A Ob
是局部变量,因此它被创建和销毁。当它被销毁时,它将调用其析构函数将 i 修改为10
并且我期望i
是10
,但答案显示i : 3
。