拷貝建構函式為什麼要用引用傳參?

2021-10-24 17:11:15 字數 507 閱讀 8192

拷貝建構函式是類的六個預設成員函式之一,他是建構函式的乙個過載形式,其引數只有乙個且必須要引用傳遞,那我們不禁想問值傳遞可以嘛?

下面是乙個拷貝建構函式的**,讓我們來分析下:

date

(const date d)..

....

intmain()

當用已存在的物件建立新物件時候,編譯器會自動呼叫拷貝建構函式完成新物件的初始化操作。

假設該**是成立,在值傳遞時候,傳參期間會產生乙個臨時變數,當我們例項化物件d1後,將d1拷貝給d2時呼叫拷貝建構函式,此時d1發生值傳遞,d1將值傳遞給臨時物件dd1,而此時又要呼叫拷貝建構函式將d1的值傳遞給dd1,因為是值傳遞,一旦呼叫又要產生臨時變數ddd1,將d1的值傳遞給臨時變數ddd1,那麼問題就很明顯了,值傳遞,會進行形參例項化,類型別例項化,會再呼叫建構函式,就會一直呼叫,因此結果就是無窮遞迴

拷貝建構函式為什麼要用引用?

一 引用 1.概念 引用不是新定義乙個變數,而是給已經存在的變數取了個別名,編譯器不會為引用開闢記憶體空間,它和它引用的變數共用同一塊記憶體空間。2.和指標區別 引用在定義時必須初始化,指標沒有要求 引用在初始化時引用乙個實體後,就不能再引用其他實體,而指標可以在任何時候指向任何乙個同型別實體 沒有...

c 拷貝建構函式引用傳參

看一道c 面試題 給出下述 分析編譯執行的結果,並提供3個選項 a.編譯錯誤 b.編譯成功,執行時程式崩潰 c.編譯執行正常,輸出10 class a private int value public a int n a a other void print int main a a 10 a b ...

為什麼拷貝建構函式的形參必須是引用型別?

複製建構函式只有乙個引數,由於在建立時傳入的是同種型別的物件,所以乙個很自然的想法是將該型別的物件作為引數,像這樣 sample sample a 不幸的是,即使是這樣樸實無華的宣告也隱含了乙個微妙的錯誤,呵,我們來看看 當某個時候需要以乙個sample物件的值來為乙個新物件進行初始化時,編譯器會在...