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&lt;int&gt;),编译器不再需要该类型。 你的意思是一个空向量? @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 ++在类中初始化一个空列表的主要内容,如果未能解决你的问题,请参考以下文章

C ++ - 在类中构造对象

C++---类成员变量定义为引用

在类构造函数内初始化 Dev C 中的字符串数组

类定义中的静态数据成员初始化?

如何在Obj C中的另一个类中使用一个类中声明的变量

初始化列表的使用(十五)