我有一个类似下面的模板类。我重载了赋值运算符。当我将一个变量分配给另一个变量时,永远不会调用重载的赋值运算符。看起来编译器正在生成一个默认赋值运算符并调用它。有什么理由吗?
#include<iostream>
using namespace std;
template<typename T>
class X
{
public:
X()
{
cout<<"X()"<<endl;
}
X& operator=( X&)
{
cout<<"X=()"<<endl;
}
};
int main()
{
X<int> a;
X<int> b = a;
}
输出:
X()
预期产出:
X()
X=()
答案 0 :(得分:3)
X<int> b = a;
是初始化,而不是赋值,因此调用了复制构造函数。
此语法称为复制初始化。它与X<int> b(a)
类似。
获得作业:
X<int> b;
b = a;
另请注意,正确的赋值运算符如下所示:
X& operator=(const X&)
{
//...
return this;
}