【发布时间】:2020-07-09 19:36:10
【问题描述】:
在研究运算符重载的同时,我试图了解返回引用的真正意义。我创建了这个非常简单的问题:
#include <iostream>
using namespace std;
class mydoub {
public:
double pub;
mydoub(double i = 0) : pub(i) {}
};
mydoub &operator += (mydoub &a, double b) {
a.pub = a.pub+b;
return a;
}
int main() {
mydoub a(5), b(6);
cout << "1: " << a.pub << " " << b.pub << endl; // expected output 1: 5 6
b = a+= 7;
cout << "2: " << a.pub << " " << b.pub << endl; // expected output 2: 12 12
b.pub = 8;
cout << "3: " << a.pub << " " << b.pub << endl; // unexpected output: 3: 12 8
}
输出是:
1: 5 6
2: 12 12
3: 12 8
这对我来说是非常出乎意料的。事实上,b 已经被分配了对 a 的引用,就在后者被修改之后,所以我希望 b.pub=8 也会对 a 起作用,因为引用通过运算符 @ 987654327@。为什么不是这样?那么与非引用重载有什么区别,比如mydoub operator += ( ..?
【问题讨论】:
标签: c++ reference operator-overloading pass-by-reference