为什么输出是0003212?为什么不使用我的(模板)构造函数进行初始化?
#include <iostream>
using namespace std;
template<typename X> class C
{
public:
C() { cout<<"0";}
template<class T> C(const C<T>& c) { cout<<"1";}
C(const C<int>& c) { cout<<"2";}
template<class T> C(const C<T*>& c) { cout<<"3";}
};
int main(int argc, char* args[])
{
C<int> c1; // 0
C<double> c2; // 0
C<int*> c3; // 0
C<int> c4(c3); // 3
C<int> c5(c1); // 2
C<int> c6(c2); // 1
C<float> c7(c1); // 2
C<double> c8(c2); // ?
std::cin.get();
return 0;
}
什么是在最后的意义线中调用?
我可以假设它的一些自动创建的构造函数 但不能找出哪一个。
:不,模板的构造函数永远不能取代的拷贝构造函数。而默认的拷贝构造函数'C :: C(const C &)'比'c8'初始化更适合比任何模板。 –
你 Ç :: C(常量ç&) 和我 模板 C(常量ç&C){COUT << “1”;} 是不是一回事? –
Papirosnik
不,他们不是。我会添加一个解释原因的答案。 –