如何初始化一個空列表作爲C++類中的私有成員?我不想提示用戶傳入一個空列表,而只是在創建一個新的類實例時創建一個。C++初始化類中的空列表
header.h
class MyClass{
public:
MyClass();
private:
list<int> myList;
}
MyClass.cpp
MyClass::MyClass()
:myList(list<int>){}
這並不書面工作,我缺少什麼嗎?
如何初始化一個空列表作爲C++類中的私有成員?我不想提示用戶傳入一個空列表,而只是在創建一個新的類實例時創建一個。C++初始化類中的空列表
header.h
class MyClass{
public:
MyClass();
private:
list<int> myList;
}
MyClass.cpp
MyClass::MyClass()
:myList(list<int>){}
這並不書面工作,我缺少什麼嗎?
你不需要做任何事情。默認構造函數,如名稱所示,默認情況下會調用。因此,這已經是正確的:
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;
};
如果你想選擇地手一個用戶定義的值,你可以使用構造函數的初始化列表。此外,將列表默認爲空白內容。
class MyClass{
public:
MyClass(list<int> theList = {}) : myList(theList) {}
private:
list<int> myList;
}
這會導致不必要的副本。 – Barry
當然,但是當沒有設置可選參數時,您會獲得空初始化的額外好處。而可選參數是一個非常常見的場景:)。爲了完整性,只需添加此選項。 –
嘗試刪除''(列表)',編譯器不需要再次輸入類型。 –
你的意思是一個空載體? – Carlos
@Jaochim Pileborg謝謝我相信那是個問題,我雖然也必須在構造函數中指定它。 – LBaelish