拷贝构造函数的参数应为同类对象的 const 左值引用
6.8.4 ID_illCopyConstructorParam
如果构造函数的参数不是同类对象的左值引用,则不构成拷贝构造函数,拷贝构造函数不应具备复制之外的功能,故其参数不应被修改,应受 const 关键字限制。
拷贝构造函数可能会被优化而导致复制之外的功能不生效,可参见 ID_sideEffectCopyConstructor 的进一步讨论。
示例:
struct A {
A(A); // Non-compliant, logic and compile error
A(A&); // Non-compliant, missing ‘const’
};
拷贝构造函数不可按值传递参数,否则会再次调用拷贝构造函数,从而陷入无限递归。
应改为:
struct A {
A(const A&); // Compliant
};