传递参数,列表&复制构造函数c ++

时间:2012-11-06 08:46:30

标签: c++ list parameter-passing copy-constructor

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

  

在传递参数中,在函数调用期间,复制参数=>为每个参数调用复制构造函数。假设将List作为参数传递,则复制列表的所有元素。如果它是对列表的引用,则仅复制列表的地址。你对这些陈述有什么看法?

我的回答是“如果它是对列表的引用,不仅复制了地址而且还复制了值”,我得到5分中的5分。 我的回答错了吗?对我来说,这就是我得到的。上述陈述是否正确?

2 个答案:

答案 0 :(得分:6)

如果您通过引用传递,则不会创建该对象的副本。这是传递参考和传递值之间的区别。

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

虽然配方错了:

  

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

将列表或引用传递给列表无关紧要。重要的是该方法如何获取参数 - 无论是通过值还是通过引用:

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

答案 1 :(得分:0)

你的回答是错误的。当您通过引用传递变量时,它与将指针传递给变量(地址)然后将其解除相同,在此过程中不会复制变量。