C ++在类中初始化一个空列表
Posted
技术标签:
【中文标题】C ++在类中初始化一个空列表【英文标题】:C++ initialize an empty list in class 【发布时间】:2016-02-07 16:13:30 【问题描述】:如何将空列表初始化为 C++ 类中的私有成员?我不想提示用户传入一个空列表,而是在创建类的新实例时创建一个。
header.h
class MyClass
public:
MyClass();
private:
list<int> myList;
MyClass.cpp
MyClass::MyClass()
:myList(list<int>)
这不像写的那样工作,我在这里错过了什么?
【问题讨论】:
尝试删除(list<int>)
,编译器不再需要该类型。
你的意思是一个空向量?
@Jaochim Pileborg 谢谢我相信这是问题所在,虽然我也必须在构造函数中指定它。
完全删除构造函数。列表的默认初始化是一个空列表。
【参考方案1】:
你不需要做任何事情。顾名思义,默认构造函数是默认调用的。所以这已经是正确的:
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;
;
【讨论】:
感谢您的回复,我知道默认构造函数,但没有意识到将列表声明为私有成员就足够了 @LBaelish 它不必是私有的。构造一个类必须构造它的所有成员——如果你没有为成员指定构造函数,则使用默认值。【参考方案2】:如果你想选择性地提交一个用户定义的值,你可以使用你的构造函数的初始化列表。此外,将列表默认为空内容。
class MyClass
public:
MyClass(list<int> theList = ) : myList(theList)
private:
list<int> myList;
【讨论】:
这会导致不必要的复制。 当然,但是当未设置可选参数时,您可以获得空初始化的额外好处。可选参数是一个完全常见的场景:)。只是为了完整起见添加此选项。以上是关于C ++在类中初始化一个空列表的主要内容,如果未能解决你的问题,请参考以下文章