老师好,我做了一个实验,对于实验现象还不能彻底理解。
首先仿照课堂内容定义了一个复数类Complex,并对其"+"运算符进行重载,如下。在重载函数中打印了tmp变量的地址。
此时,还没有对"="运算符进行重载,按照下面两种形式进行赋值,并将左值的地址打印出来。
打印出的地址如下。
可以看到,两种不同的赋值方式会产生不同的效果。
而后对"="运算符进行重载,重载函数如下。
如下可以看到,第一种赋值会调用重载函数,而第二种不会(第一种赋值中的等于号变颜色了)。
运行,打印出的地址如下。
可以看到,两种方法产生的效果仍然不同。
推测:是不是因为两种赋值操作其实是不同的,虽然都用了"="这个符号,第一种是真正的赋值,第二种是“定义”了一个变量,故产生此结果?
其他疑问:栈区变量tmp为何在离开函数作用域后仍然有效?是认为其被引用了所以就有效吗?还是说此处产生这种现象仅仅是编译器的一种优化?