0
class test{
     test(test);
     //test(test*);
};

我很好奇为什么 c++ 禁止在构造函数中使用类的类型参数。编译器很难处理吗?

4

3 回答 3

4

因为它会生成一个递归构造函数。当您按值传递时,它需要在传递参数之前复制构造参数...调用test(test),需要...您得到图片。

您需要通过引用传递复制构造函数:test(const test& rhs).

于 2013-06-20T07:42:12.987 回答
3

当您按值传递参数时,它会被复制。因此,对于通过值传递到复制构造函数的参数,它必须被复制。但是复制机制是你正在定义的。那么如何复制而不能复制呢?

您不能,因此复制构造函数不能按值接受(因此test(const test& t)而不是test(test t))。

于 2013-06-20T07:41:56.483 回答
2

因为无限递归。您在构造函数中按值传递原始对象,因此应该使用您正在调用的相同构造函数来复制它。

于 2013-06-20T07:42:22.190 回答