2016-02-07 105 views
-1

如何初始化一個空列表作爲C++類中的私有成員?我不想提示用戶傳入一個空列表,而只是在創建一個新的類實例時創建一個。C++初始化類中的空列表

header.h

class MyClass{ 
public: 
    MyClass(); 
private: 
    list<int> myList; 
} 

MyClass.cpp

MyClass::MyClass() 
    :myList(list<int>){} 

這並不書面工作,我缺少什麼嗎?

+3

嘗試刪除''(列表)',編譯器不需要再次輸入類型。 –

+0

你的意思是一個空載體? – Carlos

+0

@Jaochim Pileborg謝謝我相信那是個問題,我雖然也必須在構造函數中指定它。 – LBaelish

回答

5

你不需要做任何事情。默認構造函數,如名稱所示,默認情況下會調用。因此,這已經是正確的:

class MyClass{ 
public: 
    MyClass() { }   // c++03 
    MyClass() = default; // c++11 
private: 
    std::list<int> myList; 
}; 

如果你想還有myList在成員初始化列表,你可以做到這一點,只需提供空括號:

class MyClass{ 
public: 
    MyClass() 
    : myList() // explicitly use default ctor 
    {} 
private: 
    std::list<int> myList; 
}; 
+0

感謝您的回覆,我意識到了默認的構造函數,但並沒有意識到將該列表聲明爲私有成員是足夠的 – LBaelish

+0

@LaBelish它不必是私有的。構造一個類必須構造它的所有成員 - 如果你沒有爲成員指定一個構造函數,則使用默認值。 – Barry

1

如果你想選擇地手一個用戶定義的值,你可以使用構造函數的初始化列表。此外,將列表默認爲空白內容。

class MyClass{ 
public: 
    MyClass(list<int> theList = {}) : myList(theList) {} 

private: 
    list<int> myList; 
} 
+0

這會導致不必要的副本。 – Barry

+0

當然,但是當沒有設置可選參數時,您會獲得空初始化的額外好處。而可選參數是一個非常常見的場景:)。爲了完整性,只需添加此選項。 –