#include <iostream>
using namespace std;
class A {
public:
int i;
A(int j) : i(j){ cout << "A::A()" << '\n';}
~A(){ cout << "A::~A()" << '\n';}
};
A& fun2() {
A a1(10);
A &aref = a1;
return aref;
}
int main() {
A &a2 = fun2();
cout << "a2.i : " << a2.i << '\n';
a2.i = 20;
cout << "a2.i : " << a2.i << '\n';
fun2().i = 30;
cout << "a2.i : " << a2.i << '\n';
return 0;
}
输出:
ubuntu@ubuntu-VirtualBox:~/Vaibhav_New$ ./Test8 A::A() A::~A() a2.i : 10 a2.i : 20 A::A() A::~A() a2.i : 30
在fun2()
中,在函数退出时创建并销毁本地对象a1
。
我返回了引用并使用了对象(a2.i)。
Q1)为什么我能做到这一点?
当我再次调用fun2()
时,会创建并销毁另一个对象(旧的本地对象已被销毁:析构函数被调用)。我修改了它(不知道如何)如下:
fun2().i = 30;
Q2)为什么这会影响对象a2
?
Earlier: a2.i : 20
Now: a2.i : 30
我对C ++并不陌生,但对我来说,引用仍然是个谜:(