gpt4 book ai didi

c++ - 复制构造函数的参数

转载 作者:行者123 更新时间:2023-12-01 12:55:08 25 4
gpt4 key购买 nike

为什么要使用对复制构造函数的参数的引用?

我发现很多信息说这是为了避免无限制的通话,但我仍然听不懂。

最佳答案

当您按值传递给方法时,将复制该参数。复制使用复制构造函数,因此您对复制构造函数进行无限递归调用会遇到麻烦。

对评论的回应:

通过引用传递不会使对象的拷贝开始传递。它只是传递对象的地址(隐藏在引用语法之后),因此复制构造函数内部的对象(或通过引用传递对象的任何方法)与外部对象相同。

除了在这里解决“鸡与蛋”问题外,按引用传递通常更快(对于较大的对象-大于一个点的大小)。

对进一步评论的回应:

您可以编写一种通过指针传递的拷贝构造函数,并且其工作方式与通过引用传递的方式相同。但是,显式调用是不可能的,而隐式调用是不可能的。

宣言:

class X
{
public:
X();
X(const X* const pOther);
};

显式拷贝:
X x1;

X x2(&x1); // Have to take address

隐式拷贝:
void foo (X copyOfX);   // Pass by value, copy made

...

X x1;

foo (x1); // Copy constructor called implicitly if correctly declared
// But not matched if declared with pointer

foo (&x1); // Copy construcxtor with pointer might (?) be matched
// But function call to foo isn't

最终,这样的事情将不会被视为C++复制构造函数。

关于c++ - 复制构造函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60987814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com