类副本构造不能具有类类型的参数

Class copy construction can't have parameter of type of the class

本文关键字:类型 参数 不能 副本      更新时间:2023-10-16
class test{
     test(test);
     //test(test*);
};

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

因为它会生成递归构造函数。当按值传递时,它需要在传递参数之前复制构造参数…它调用test(test),它需要。你懂的。

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

按值传递参数时,它将被复制。因此,对于按值传递给复制构造函数的形参,必须复制它。但是复制机制是你正在定义的。那么,在不能够复制的情况下,如何复制呢?

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

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