我有以下代码:
#include <iostream>
using namespace std;
template<typename T> class myclass {
public:
T data;
myclass(T const & _data = T()) : data(_data) {}
template<typename U> myclass<T> & operator=(myclass<U> const & rhs) {
cout << data << " = " << rhs.data << endl;
return *this;
}
};
int main() {
myclass<double> first(1);
myclass<float> second(2);
myclass<double> third(3);
first=second;
first=third;
}
现在,虽然编译完美,但输出只有:
1 + 2
为什么 first=third 不调用
myclass<double> & operator=(myclass<double> const & rhs)
?
最佳答案
复制赋值运算符永远不是函数模板。由于该类未声明复制赋值运算符,因此编译器会生成一个并使用此生成的运算符。如果您像这样添加运算符,您将看到分配:
myclass<T>& operator= (myclass<T> const& rhs) {
std::cout << "(copy) " << data << " = " << rhs.data << '\n';
return *this;
}
关于c++ - 模板类中模板函数的相同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14107220/