2015-04-15 65 views
3

我對ctor明確默認會發生什麼感到困惑。顯式默認構造函數和成員變量的初始化

這兩個代碼樣本是否等於?

Y是否有任何限制能夠使用第一個選項?

class X 
{ 
public: 
    X() = default; 

private: 
    Y m_y; 
}; 

class X 
{ 
public: 
    X() : m_y() {} 

private: 
    Y m_y; 
}; 

回答

0

這裏也是一樣。用明確的cto'rs你只能執行他的創作。否則,如果不使用默認構造函數,編譯器可以避免創建它。創建共享庫時可能很有趣。 僅供參考http://en.cppreference.com/w/cpp/language/default_constructor

+0

有一些微妙的區別2 ... – Jarod42

+0

一些細節必須依賴實現,如int的初始化...但嚴格來說,默認與其他兩個構造函數相同。不過,我認爲需要引入默認值才能讓編譯器在生成時進行選擇。如果缺省不存在,編譯器會強制生成構造函數,即使不使用。這是關鍵。 –

7

有兩種可能的差異來源。

  1. X() = default;不是用戶提供X() : m_y() {}是。前者可以是微不足道的;後者從來都不是微不足道的。而且,如果X對象進行了值初始化,它們的行爲將會有所不同。

  2. 該組由X() = default;執行的初始化等同於的X() {},其缺省初始化m_yX() : m_y() {}值初始化m_y。取決於Y是什麼,這可能是不同的。例如,如果Yint,那麼默認初始化將使其具有不確定的值,而值初始化將其設置爲零。

相關問題