传递参数,列出和复制构造函数C ++

passing parameter, list & copy constructor c++

本文关键字:复制 构造函数 参数      更新时间:2023-10-16

我在考试中得到了这个问题

在传递参数中,在函数调用过程中,复制参数=>调用每个参数的复制构造函数。假设列表作为参数传递,列表的所有元素均已复制。如果是对列表的引用,则仅复制列表的地址。您对这些陈述有何评论?

我的答案是"如果它是对列表的引用,不仅是复制地址,而且还要复制了值",我得到了10分中的5分。我的答案错了吗?对我来说,这就是我得到的。上面的语句是否正确?

如果通过参考传递,则不会制作对象的副本。这就是通过参考和通过值传递的区别。

在引擎盖下,参考文献被实现为指针,因此您可以说地址已复制,但这是一个实现细节。

公式是错误的:

假设列表作为参数传递,列表的所有元素均已复制。如果是对列表的引用,则仅复制列表的地址。

是通过列表还是对列表的引用都没关系。重要的是该方法如何采用参数 - 按值或参考:

void foo(list l);
void goo(list& l);
list x;
list& y = x;
foo(x);  //pass a list by value          --copy is made
foo(y);  //pass a reference by value     --copy is made
goo(x);  //pass a list by reference      --no copy of the list
goo(y);  //pass a reference by reference --no copy of the list

您的答案是错误的。当您通过引用传递变量时,它与将指针传递给变量(adress),然后将其进行放置,则在此过程中没有制作变量的副本。