我在考试中得到了这个问题
在传递参数中,在函数调用期间,参数被复制 => 调用每个参数的复制构造函数。假设一个列表作为参数传递,列表的所有元素都被复制。如果是对列表的引用,则只复制列表的地址。你对这些言论有什么看法?
我的回答是“如果它是对列表的引用,不仅地址会被复制,而且值也会被复制”,我得到了 10 分中的 5 分。我的回答错了吗?对我来说,这就是我得到的。上面的说法正确吗?
我在考试中得到了这个问题
在传递参数中,在函数调用期间,参数被复制 => 调用每个参数的复制构造函数。假设一个列表作为参数传递,列表的所有元素都被复制。如果是对列表的引用,则只复制列表的地址。你对这些言论有什么看法?
我的回答是“如果它是对列表的引用,不仅地址会被复制,而且值也会被复制”,我得到了 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
你的答案是错误的。当您通过引用传递变量时,它与将指针传递给变量(地址)然后取消引用它相同,在此过程中不会复制变量。