【发布时间】:2020-02-28 07:20:36
【问题描述】:
根据 cppreference,复制赋值运算符不应模板化:
类 T 的复制赋值运算符是一个非模板非静态成员函数,其名称为 operator=,它只接受一个类型为 T、T&、const T&、volatile T& 或const volatile T&"
但是在这个示例程序中,我写了一个模板赋值运算符,没有编译问题,它实际上被调用(而不是默认隐式生成)。
template<typename T1>
class Sample
{
public:
T1 a;
Sample(T1 b)
{
a=b;
}
template<typename T2>
void operator = (T2& obj2)
{
cout<<"This wont be called";
(*this).a=obj2.a;
}
};
Sample<int> obj1(2);
Sample<int> obj2(3);
obj2=obj1;
输出:
This wont be called
我是不是误会了什么?
【问题讨论】: