可以将对象作为值传递给复制构造函数

Zuz*_*uzu 6 c++

我对此有一些困惑"可以将对象作为值传递给复制构造函数"编译器明确拒绝这一点,这意味着它是不可能的.你能帮我理解一下吗?

class Dummy{
    Dummy(Dummy dummy){ // This is not possible
    }
};
Run Code Online (Sandbox Code Playgroud)

那么为什么它会说"复制构造函数会在使用值传递时导致递归调用."

Don*_*ner 12

这是因为为了传递值,您需要复制对象.因此,您正在传递对象的副本,在如何复制它的定义中.

如果没有此陷阱,实际上会发生什么情况,您的复制构造函数将调用您的复制构造函数来创建一个副本,该副本将调用您的复制构造函数来创建一个副本,该副本将调用您的复制构造函数来创建副本,...


Jam*_*lis 5

没有.

正如错误所说,它将导致复制构造函数的递归调用.复制构造函数用于复制对象.您需要在按值传递对象时制作对象的副本.

因此,如果您可以使用这样的构造函数,则需要调用复制构造函数来复制传递给复制构造函数的对象,无限制.


Mic*_*urr 5

标准具体说(12.1/10构造函数):

类X的复制构造函数是一个构造函数,其第一个参数类型为X&或类型为const X&

所以它不能采用值参数 - 它必须是一个参考.

如果你考虑一下,应该清楚为什么:要传递一个值参数,编译器必须复制...它需要调用复制构造函数来执行此操作.