我對ctor明確默認會發生什麼感到困惑。顯式默認構造函數和成員變量的初始化
這兩個代碼樣本是否等於?
Y
是否有任何限制能夠使用第一個選項?
class X
{
public:
X() = default;
private:
Y m_y;
};
class X
{
public:
X() : m_y() {}
private:
Y m_y;
};
我對ctor明確默認會發生什麼感到困惑。顯式默認構造函數和成員變量的初始化
這兩個代碼樣本是否等於?
Y
是否有任何限制能夠使用第一個選項?
class X
{
public:
X() = default;
private:
Y m_y;
};
class X
{
public:
X() : m_y() {}
private:
Y m_y;
};
這裏也是一樣。用明確的cto'rs你只能執行他的創作。否則,如果不使用默認構造函數,編譯器可以避免創建它。創建共享庫時可能很有趣。 僅供參考http://en.cppreference.com/w/cpp/language/default_constructor
有兩種可能的差異來源。
X() = default;
不是用戶提供。 X() : m_y() {}
是。前者可以是微不足道的;後者從來都不是微不足道的。而且,如果X
對象進行了值初始化,它們的行爲將會有所不同。
該組由X() = default;
執行的初始化等同於的X() {}
,其缺省初始化m_y
。 X() : m_y() {}
值初始化m_y
。取決於Y
是什麼,這可能是不同的。例如,如果Y
是int
,那麼默認初始化將使其具有不確定的值,而值初始化將其設置爲零。
有一些微妙的區別2 ... – Jarod42
一些細節必須依賴實現,如int的初始化...但嚴格來說,默認與其他兩個構造函數相同。不過,我認爲需要引入默認值才能讓編譯器在生成時進行選擇。如果缺省不存在,編譯器會強制生成構造函數,即使不使用。這是關鍵。 –