这是我的代码:
#include <iostream>
using namespace std;
class A
{
int i;
public:
A(int v) : i(v) { }
A(const A& r) : i(r.i) {
cout << "Copy constructor" << endl;
}
A operator=(const A& r) {
cout << "Assignment function" << endl;
return r;
}
void show() {
cout << i << endl;
}
};
int main()
{
A a(1);
A b(2);
a = b;
a.show();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
价值b就是2和价值a是1.在'main'中,b被复制到a我得到的输出中:
Assignment function
Copy constructor
Run Code Online (Sandbox Code Playgroud)
这是可以理解的,但输出a.show()结果是1.我无法理解这一点.怎么样?因为b复制到使用复制构造函数所以不应该a.i具有值b.i?
b被复制到a使用赋值运算符,而不是复制构造函数.并且您的赋值运算符不会分配i,因此a.i保留其原始值.
您看到的复制构造函数是返回值operator=.通过引用返回左侧更为习惯,而不是通过值返回右侧:
A& operator=(const A& r) {
cout << "Assignment function" << endl;
i = r.i;
return *this;
}
Run Code Online (Sandbox Code Playgroud)