例1:
class A
{
int x;
public:
A(int i):x(i){}
int get(){return x;}
};
A& func()
{
A a(23);
return a;
}
int main()
{
A &r = func();
cout<<r.get()<<endl;
return 0;
}
输出:1245000
解释:r被初始化为返回值的别名。由于是按引用返回,返回值就是a的别名。因此,r就是a的别名。
a是一个局部变量,func()结束后,a消失了。r成了一个空的引用。
因此,输出的是上个随机值。
例2:
class A
{
int x;
public:
A(int i):x(i){cout<<"construct "<<this<<endl;}
A(const A& a){x = a.x;cout<<"copy "<<this<<endl;}
~A(){cout<<"delete "<<this<<endl;}
int get(){return x;}
};
A func()
{
A a(23);
return a;
}
int main()
{
A &r = func();
cout<<r.get()<<endl;
return 0;
}
输出:
construct 0012FEC8