2012-11-06 89 views
0

我一個函數調用期間得到了我的考試傳遞參數,列表和拷貝構造函數C++

在路過參數這個問題,參數複製=>調用拷貝構造函數的每個參數。假設列表作爲參數傳遞,列表的所有元素都被複制。如果它是對列表的引用,則只複製列表的地址。你對這些陳述有什麼看法?

我的回答是「如果它是一個列表的引用,不僅地址被複制,而且值」我得到了10分中的5分。 我的答案錯了嗎?對我而言,這就是我得到的。上述聲明是否正確?

回答

6

如果通過引用傳遞,則不會創建該對象的副本。這是通過引用傳遞和按值傳遞之間的區別。

在引擎蓋下,引用被實現爲指針,所以你可以說地址被複制,但這是一個實現細節。

的制定,雖然是錯誤的:

假設一個列表作爲參數傳遞,列表中的所有元素都複製。如果它是對列表的引用,則只複製列表的地址。

如果你傳遞一個列表或一個列表的引用不要緊。重要的是該方法如何處理參數 - 按價值或參考:

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 
+0

那麼這個陳述是真的嗎?我很困惑,當它說,參考一個清單 – greenthunder

+0

@greenth瀟灑地說,不,它不是。 –

+0

@ greenthunder但你的答案都不是:P –

0

您的答案錯誤。當你通過引用傳遞變量時,它和傳遞指針給變量(adress)一樣,然後取消它的引用,在這個過程中沒有變量的副本。