我对此有一些困惑"可以将对象作为值传递给复制构造函数"编译器明确拒绝这一点,这意味着它是不可能的.你能帮我理解一下吗?
class Dummy{
Dummy(Dummy dummy){ // This is not possible
}
};
Run Code Online (Sandbox Code Playgroud)
那么为什么它会说"复制构造函数会在使用值传递时导致递归调用."
Don*_*ner 12
这是因为为了传递值,您需要复制对象.因此,您正在传递对象的副本,在如何复制它的定义中.
如果没有此陷阱,实际上会发生什么情况,您的复制构造函数将调用您的复制构造函数来创建一个副本,该副本将调用您的复制构造函数来创建一个副本,该副本将调用您的复制构造函数来创建副本,...
没有.
正如错误所说,它将导致复制构造函数的递归调用.复制构造函数用于复制对象.您需要在按值传递对象时制作对象的副本.
因此,如果您可以使用这样的构造函数,则需要调用复制构造函数来复制传递给复制构造函数的对象,无限制.
标准具体说(12.1/10构造函数):
类X的复制构造函数是一个构造函数,其第一个参数类型为X&或类型为const X&
所以它不能采用值参数 - 它必须是一个参考.
如果你考虑一下,应该清楚为什么:要传递一个值参数,编译器必须复制...它需要调用复制构造函数来执行此操作.
| 归档时间: |
|
| 查看次数: |
3319 次 |
| 最近记录: |