【发布时间】:2015-12-08 20:56:17
【问题描述】:
我有一个模板类,它有一个模板复制构造函数。问题是当我使用具有相同模板类型的此类的另一个实例来实例化此类时,不会调用我的模板复制构造函数。为什么不匹配?
这里是sn-p的代码:
#include <iostream>
template <typename T>
class MyTemplateClass
{
public:
MyTemplateClass()
{
std::cout << "default constructor" << std::endl;
}
/*
MyTemplateClass(const MyTemplateClass<T>& other)
{
std::cout << "copy constructor" << std::endl;
}
*/
template <typename U>
MyTemplateClass(const MyTemplateClass<U>& other)
{
std::cout << "template copy constructor" << std::endl;
}
};
int main()
{
MyTemplateClass<int> instance;
MyTemplateClass<int> instance2(instance);
return EXIT_SUCCESS;
}
输出是
default constructor
但是如果我显式编写默认的复制构造函数(通过取消注释),那么输出变为
default constructor
copy constructor
我真的不明白。我使用本地编译器 (Clang 500.2.79) 和 this one (GCC 4.9.2) 对其进行了测试,得到了相同的结果。
【问题讨论】:
-
模板永远不是(!)复制构造函数!
-
复制构造函数永远不是模板。
-
有一个隐式声明的复制构造函数,它是重载决议的首选。
标签: c++ templates copy-constructor