可能重複:
Why should the copy constructor accept its parameter by reference in C++?拷貝構造函數在C++
爲什麼我們有一個拷貝構造函數總是有一個參考?
如果有class
:
class Base{};
它的拷貝構造函數是:
Base::Base(const Base& B);
爲什麼總是作爲參數的參考?
可能重複:
Why should the copy constructor accept its parameter by reference in C++?拷貝構造函數在C++
爲什麼我們有一個拷貝構造函數總是有一個參考?
如果有class
:
class Base{};
它的拷貝構造函數是:
Base::Base(const Base& B);
爲什麼總是作爲參數的參考?
如果它不是一個引用,編譯器需要調用複製構造函數以將參數傳遞給複製構造函數。
這將導致stack overflow http://www.prodeveloper.org/wp-content/uploads/2008/10/stackoverflow-logo-250.png。
如果您試圖通過值傳遞參數,編譯器將不得不復制該參數,這將再次調用複製構造函數。這會導致無限的遞歸和堆棧溢出。
當需要製作對象的副本時調用複製構造函數。
現在想,如果拷貝構造函數不取對象的參考,這意味着你已經通過值傳遞給它這反過來將需要使你的原始對象的副本。這意味着,它會再次調用複製構造函數來創建對象的副本。這樣,它會繼續調用複製構造函數。
阿哈哈得獎回答 – deek0146
我說:史詩贏了! –
非常不好..有人得到這麼多upvotes:P – Nawaz