问题一:
返回一个局部变量的引用。如:
int& ABC()
{
int n = 5;
return n;
}
void main()
{
int x;
x=ABC();
cout<<x<<endl;
}
为什么这里能接收到 返回局部变量的引用呢?局部变量n没有被销毁吗?
我实验过了。
问题二:
局部对象这样也可以接收到。如下面这个程序:
#include <iostream>
using namespace std;
class Complex
{
public:
Complex(double r=0,double i=0)
{
real=r;imag=i;
}
Complex(const Complex& c);
Complex& operator+(Complex &);
void display( );
private:
double real, imag;
};
Complex::Complex(const Complex& c)
{
real=c.real;
imag=c.imag;
}
Complex& Complex::operator+(Complex &c2)
{
int a=1;
Complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;
}
void Complex::display( )
{
int xxxx=1;
cout <<"(" <<real <<"+" <<imag <<"i)" <<endl;
}
int main( )
{
double x, y;
cin>>x>>y;
Complex comp1(x,y),comp2(y,x),comp3;
comp1.display( );
comp2.display( );
comp3=comp1.operator+(comp2); //用对象 接收函数返回的引用
Complex& p=comp1.operator+(comp2); //用对象的引用 接收函数返回的引用
p.display();
comp3.display();
return 0;
}
这里 《用对象 接收函数返回的引用》和《用对象的引用 接收函数返回的引用》结果是不同的,一个被释放了。另一个没有被释放。为什么?用不同的
类型接收 局部对象的引用有什么区别吗?不要说《用对象 接收函数返回的引用》 会调用拷贝构造函数。我设了断点看了。没有进入拷贝构造函数。
而且很奇怪的现像是: 对于局部对象C的地址&C和《用对象 接收函数返回的引用》的对象comp3地址不同。。。 不理解《用对象接收 函数返回的引用》内部是怎样运作 的?
int& ABC()
{
int n = 5;
return n;
} 如何实现 能让 int x=ABC()结果变?请举个例子
对于赋值。comp3=comp1.operator+(comp2);
如何实现 也能让 comp3变随机值? 举例说明。。
看不到不正常 我以后就这么用 返回临时变量的引用了。。。。