7

当我试图创建一个具有构造函数的类时,该构造函数按值获取该类的对象,例如:

class X{
    X(){}
    X(X x){} //Error!
};

然后 g++ 为第二个构造函数抱怨以下内容:

error: invalid constructor; you probably meant ‘X (const X&)’

亲爱的编译器,不,我不是指 const 引用。这一次,我想做我写的:按值传递参数x!为什么这是无效的?

4

3 回答 3

18

您正在尝试创建一个复制构造函数,并且复制构造函数必须具有引用。否则,当您将 x 按值传递给构造函数时,编译器将不得不创建 x 的临时副本,为此它需要调用复制构造函数,并需要为其创建一个临时副本....无穷无尽。

因此,复制构造函数必须通过引用获取其参数,以防止无限递归。

于 2012-08-10T15:43:31.733 回答
6

因为

X(X x){} //Error!

需要一个复制构造函数。即本身即递归。即什么时候结束?!

于 2012-08-10T15:42:43.170 回答
1

您正在尝试实现一个复制构造函数,它只能通过传递对您要复制的对象的引用来工作。

于 2012-08-10T15:42:57.883 回答