我们都知道编译器会为我们定义默认的空参数构造函数和复制构造函数,其实复制构造函数和一般的带参数的构造函数的区别也就仅仅在与此(我认为),也就是在不显示定义复制构造函数的时候,系统会为我们合成一个默认的复制构造函数。
1.定义一般的构造函数时,系统还是会为我们生成一个默认的复制构造函数,但是当定义了复制构造函数的时候系统就不再为我们定义默认的空参数构造函数,如下代码,将出现语法错误:
class m{
public:
m(const m&){
}
};
m m1;
2.(不考虑实际应用价值)当定义模板形式的一般构造函数的时候,系统还是会为我们定义一个默认的空参数构造函数,如下:
class test{
public:
template<typename t1,typename t2>
test(t1 var1,t2 var2){
std::cout<<"two params"<<std::endl;
}
};
test a();//ok
test b(1,"test");
test c=b;
test t(1,2);
test t1;//error
3.当定义模板形式的复制构造函数的时候&