2012-08-10 80 views
3

當我試圖創建具有一個構造,其通過值取該類的一個對象,例如像一類:C++「無效構造函數」

class X{ 
    X(){} 
    X(X x){} //Error! 
}; 

則g ++抱怨用於第二構造函數以下:

error: invalid constructor; you probably meant ‘X (const X&)’ 

親愛的編譯器,不,我不是指一個const引用。這一次,我想做我寫的東西:通過值傳遞參數x!爲什麼這是無效的?

+0

你會如何調用這樣的構造函數? – 2012-08-10 15:42:31

回答

13

您正在嘗試創建複製構造函數,並且複製構造函數必須參考。否則,當你通過值傳遞x到構造函數中時,編譯器將不得不創建x的臨時副本,爲此需要調用複製構造函數,爲此需要創建一個臨時副本....廣告infinium。

所以拷貝構造函數必須通過引用來引用它的參數來防止無限遞歸。

5

因爲

X(X x){} //Error! 

需要一個拷貝構造函數。即本身即遞歸。即什麼時候結束?

0

您正試圖實現一個複製構造函數,該構造函數僅通過將引用傳遞給要複製的對象。