片段1:
#include<iostream>
using namespace std;
class C{
public:
C(){}
C(const C& c){
cout<<"const copy constructor called"<<endl;
}
};
int main(){
C c1;
C c2 = c1;
return 0;
}
输出:调用 const 复制构造函数
片段2:
#include<iostream>
using namespace std;
class C{
public:
C(){}
C(const C& c){
cout<<"const copy constructor called"<<endl;
}
C(C& c){
cout<<"non-const copy constructor called.\t "<<endl;
}
};
int main(){
C c1;
C c2 = c1;
return 0;
}
输出:调用非常量复制构造函数
片段3:
#include<iostream>
using namespace std;
class C{
public:
C(){}
C(const C& c){
cout<<"const copy constructor called"<<endl;
}
C(C c){
cout<<"non-const copy constructor called.\t "<<endl;
}
};
int main(){
C c1;
C c2 = c1;
return 0;
}
输出:错误:复制构造函数必须通过引用传递其第一个参数
我很困惑:
- 对于代码段 2,为什么这里的非常量复制构造函数有效?为什么调用非 const 复制构造函数,而不是 const 构造函数。
- 对于片段 3,我知道复制构造函数必须使用 const 引用以避免无限递归。但是 Here class C has got
C(const C& c)
,C(C c)
不会导致无限递归,为什么它仍然不起作用?