当我试图创建一个具有构造函数的类时,该构造函数按值获取该类的对象,例如:
class X{
X(){}
X(X x){} //Error!
};
然后 g++ 为第二个构造函数抱怨以下内容:
error: invalid constructor; you probably meant ‘X (const X&)’
亲爱的编译器,不,我不是指 const 引用。这一次,我想做我写的:按值传递参数x!为什么这是无效的?
当我试图创建一个具有构造函数的类时,该构造函数按值获取该类的对象,例如:
class X{
X(){}
X(X x){} //Error!
};
然后 g++ 为第二个构造函数抱怨以下内容:
error: invalid constructor; you probably meant ‘X (const X&)’
亲爱的编译器,不,我不是指 const 引用。这一次,我想做我写的:按值传递参数x!为什么这是无效的?
您正在尝试创建一个复制构造函数,并且复制构造函数必须具有引用。否则,当您将 x 按值传递给构造函数时,编译器将不得不创建 x 的临时副本,为此它需要调用复制构造函数,并需要为其创建一个临时副本....无穷无尽。
因此,复制构造函数必须通过引用获取其参数,以防止无限递归。
因为
X(X x){} //Error!
需要一个复制构造函数。即本身即递归。即什么时候结束?!
您正在尝试实现一个复制构造函数,它只能通过传递对您要复制的对象的引用来工作。