1. 返回一个引用类型
Q:如果返回一个引用, 那是不是这个新的对象就是等于调用重载运算符的地址
A:傻x, 返回来只是为了效率,返回引用,你return的时候就不用调用一个拷贝构造来给这个临时对象,然后结束这个函数的时候,对其新对象调用拷贝构造就行了
另外再强调一下,值是怎么返回的,类似初始化一个变量,返回的值用于初始化调用点的一个临时量(临时对象),
#include <iostream>
#include <algorithm>
using namespace std;
class A {
public:
int num;
A(int x = 0):num(x) {
cout << "A()\n";
A(A& obj) {
cout << "A(A & obj)\n";
~A() {
cout << "~A()\n";
A& operator + (A& rhs)
num += rhs.num;
return *this;
A& operator = (A& rhs) {
num = rhs.num;
cout << "A& operator = (A& rhs)\n";
return *this;
int main()
A a(3);
cout << &a << "\n";
A b(4);
cout << &b << "\n";
A c;
cout << &c << "\n";
A d = c = a + b;
2.A& operator = (A& rhs)
3.A(A & obj) 返回的值用来拷贝构造
这就是为啥 oprator= 要返回 A&类型, 如果是A也行, 那要重新拷贝构造一个对象, 所以效率上说, 返回引用节省了这个操作
如果将表达式变成 A& d = a + b;
那么 d 和 a 就是同一个对象,d 是 a 的别名
cout << &d << "\n";
cout << "--------------\n";
cout << &(a + b) << "\n";
cout << &(a + b) << "\n";
cout << &(a + b) << "\n";
cout << "--------------\n";
return 0;
\