2017-10-20 110 views
-1

使用默認構造函數參數調用構造函數時,不會構造任何對象。複製和基本構造函數不初始化C++

class cl{ 
private: 
public: 
    cl(){cout << "Default used" << endl;}; 
    cl(const cl & cl_object) {cout << "Copy used" << endl;}; 
    cl & operator=(const cl & cl_object){cout << "Assignment used" << endl; return *this;}; 
}; 

當我寫:獲取顯示

cl(cl()); 

沒有消息。

問題: 1)爲什麼沒有構建對象? 2)爲什麼不使用複製構造函數?

+0

@NathanOliver你能解釋這是如何重複的嗎? – Nameless

+0

就像回答說的那樣,'cl(cl());'聲明一個函數。既然它是一個函數而不是變量,你不會看到任何構造函數調用,因爲你不需要構造任何東西。 – NathanOliver

+0

@NathanOliver所以,如果我正確理解使用cl();只構造一個對象,但使用cl(cl());聲明一個函數。但是,如果它聲明瞭一個函數,那麼編譯器不會輸出錯誤,因爲我沒有指定返回類型? – Nameless

回答

1

最棘手的解析

cl(cl()); 

被解析爲函數聲明。

+0

因爲我沒有指定返回類型,編譯器不應該輸出錯誤嗎? – Nameless

+0

我的理解是,它是一個名爲cl的函數,其類型爲cl的參數。但它仍然沒有返回類型。在我的編譯器中,如果我沒有指定返回類型,它會返回一個錯誤。那麼這裏發生了什麼? – Nameless

+0

被解析爲'c1 c1()'所以函數'c1'(它隱藏類'c1')返回類型'c1'(類)。 – Jarod42