2017-06-14 74 views
4

顯式聲明類特殊函數默認值有什麼區別?爲什麼顯式聲明類特殊函數爲「default」

class Myclass 
{ 
public: 

    Myclass() = default; 
    virtual ~Myclass() = default; 

    Myclass(MyClass&&) = default; 
    Myclass& operator=(MyClass&&) = default; 

    Myclass(const MyClass&) = default; 
    Myclass& operator=(const MyClass&) = default; 
}; 

MyClass{}; 

這2個聲明有什麼區別? 爲什麼顯式指定默認行爲函數爲默認?

+0

'class MyClass {};'版本沒有虛擬析構函數。 – sp2danny

+0

'這2條聲明有什麼區別?'2條聲明是什麼?您似乎只包含了每個特殊成員函數的1個聲明。 –

回答

8

因爲在某些條件下,編譯器可能不會添加構造函數,析構函數或運算符,即使您可能需要編譯器生成的默認值。然後,通過使用明確的default指示符,編譯器無論如何都會這樣做。

你可以在例如this class reference

+3

有時也是明確的可以增加清晰度,您表示默認生成一個是由選擇而不是錯誤。 –

相關問題