模板操作符赋值重载未被调用
templated operator assignment overload not getting called
我有一个模板类,如下所示:我重载了赋值操作符。将一个变量赋值给另一个变量时,永远不会调用重载赋值操作符。看起来编译器正在生成一个默认的赋值操作符并调用它。有什么原因吗?
#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=()
X<int> b = a;
是初始化,不是赋值,所以调用复制构造函数
X<int> b(a)
相似
获取赋值:
X<int> b;
b = a;
还要注意,正确的赋值操作符应该是这样的:
X& operator=(const X&)
{
//...
return this;
}
相关文章:
- 调用重载的"<大括号括起来的初始值设定项列表>"对于对来说就足够了是模棱两可的
- 为什么初始化时没有调用重载赋值运算符?
- 使用 MINGW gcc 编译时,不会为 std::string 调用重载的新运算符
- 为什么使用不匹配的参数调用重载函数仍然有效
- 无法弄清楚为什么没有调用重载运算符 []
- 使用 nullptr 调用重载方法是不明确的
- C++编译时检查是否可以用某种类型的参数调用重载函数
- 在 if 语句中调用重载构造函数失败
- 为什么在析构函数中引发异常时不调用重载删除
- 从派生类调用重载函数
- 传递 const int* 和 int* 时调用重载函数的不同版本(const int* const&/&&)
- C++ - 在 std::thread 中调用重载函数时编译失败
- 为在与类方法中的类相同的命名空间中定义的结构调用重载运算符
- 从 C++ 中的子类调用重载父类的方法
- 在C++中,如何从父类变量的子类调用重载方法
- 使用指针调用重载而不分配新内存
- 如何在复制构造函数中调用重载的下标
- DetectMultiScale在使用rejectLevels和levelWeights调用重载时从不返回
- 从对象指针调用重载运算符 ()
- C++ 从类中调用重载运算符