為什麼引數是物件時還要呼叫拷貝建構函式

2021-06-25 07:13:15 字數 476 閱讀 8010

物件也可以作為函式的引數傳遞給函式,其轉遞方法與傳遞其他型別的資料一樣,可採用值傳遞和位址傳遞兩種方法。

值傳遞:是把物件的拷貝而不是本身傳遞給函式,函式中對引數物件的任何修改都不會影響呼叫該函式的物件本身;

位址傳遞:呼叫該函式的物件與引數物件共用同乙個位址,所以,函式對引數物件的任何修改都會影響呼叫該函式的物件本身。

注意:在c++中,下面三種物件需要呼叫拷貝建構函式(有時也稱「複製建構函式」)

1) 乙個物件作為函式引數,以值傳遞的方式傳入函式體

2) 乙個物件作為函式返回值,以值傳遞的方式從函式返回

3) 乙個物件用於給另外乙個物件進行初始化(常稱為複製初始化)

當用引用變數做引數時,不呼叫拷貝建構函式,用傳遞引用的方式給函式傳遞乙個物件的引用時,只傳遞了該物件的位址,系

統消耗較小。在函式體內訪問    形參,實際是訪問了這個作為實參的物件。例如:void function(ctest &  test);

匿名內部類呼叫引數時為什麼引數必須是final的

public class innerclass public void display 所以從上面 來看,內部類並不是直接呼叫方法傳遞的引數,而是利用自身的構造器對傳入的引數進行備份,自己內部方法呼叫的實際上時自己的屬性而不是外部方法傳遞進來的引數。直到這裡還沒有解釋為什麼是final?在內部類中的...

拷貝建構函式的引數為什麼是引用

在c 中,建構函式,拷貝建構函式,析構函式和賦值函式 賦值運算子過載 是最基本不過的需要掌握的知識。但是如果我問你 拷貝建構函式的引數為什麼必須使用引用型別?這個問題,你會怎麼回答?或許你會回答為了減少一次記憶體拷貝?很慚愧的是,我的第一感覺也是這麼回答。不好還好,我有理性這個好品質。思索一下以後,...

拷貝建構函式的引數為什麼必須是引用?

1 include2 include 3using namespace std 4class foo5 13 foo foo f ss f.ss 1417 foo operator const foo f1 1822 void test foo f2 2326 27 28int main 29 如果...