构造函数列表初始化空向量

时间:2018-01-27 19:23:07

标签: c++ vector

列出在类ctor上初始化空向量的合适方式(如果有的话)假设?:

class Temp {
    private:
        int vals;
        vector<int> A;
    public:
        Temp(int x);
};

所有这些似乎都有效,但是甚至有必要做#1或#2,还是足够声明?:

1:明确调用向量构造函数

Temp::Temp(int x):vals(x), A() { }

2:在类ctor列表初始化中使用向量列表初始化

Temp::Temp(int x):vals(x), A{} { }

3:从类ctor列表初始化(仅限声明)中排除

Temp::Temp(int x):vals(x) { }

在类ctor初始化列表中包含vector成员似乎没有任何值,因为当我们声明它并返回一个空向量时,它的默认构造函数被调用。

1 个答案:

答案 0 :(得分:2)

  

列出在类ctor上初始化空向量的合适方式(如果有的话)假设?

它们都有效。

这主要是风格问题。如果您确实明确地在构造函数成员初始值设定项列表中设置所有类成员,那么您可以包括A的初始化以保持一致性,否则,std::vector将自动调用默认构造函数。

通常,只有需要某种非默认初始化的成员才会转到member initializer list

  

在形成函数体的复合语句之前   构造函数开始执行,初始化所有直接碱基,   虚拟基础和非静态数据成员完成。 会员   初始化列表是非默认初始化的地方   可以指定这些对象。对于不能成员的成员   default-initialized,例如reference和const-qualified成员   类型,必须指定成员初始值设定项。没有初始化   为匿名工会或没有工作的变体成员执行   成员初始化。