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

pst*_*tix 7 c++ vector

假设在类构造函数上列出初始化空向量的适当方法(如果有)是哪种?:

class Temp {
    private:
        int vals;
        vector<int> A;
    public:
        Temp(int x);
};
Run Code Online (Sandbox Code Playgroud)

所有这些似乎都有效,但是是否有必要执行 #1 或 #2,或者声明就足够了?:

1:显式调用向量构造函数

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

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

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

3:从类构造函数列表初始化中排除(仅声明)

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

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

Edg*_*jān 5

哪种方法是在假设的类构造函数上列出初始化空向量的适当方法(如果有)?

它们都是有效的。

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

通常,只有需要某种非默认初始化的成员才会进入成员初始值设定项列表

在构成构造函数函数体的复合语句开始执行之前,所有直接基类、虚拟基类和非静态数据成员的初始化已完成。成员初始化列表是可以指定这些对象的非默认初始化的地方。对于不能默认初始化的成员,例如引用和 const 限定类型的成员,必须指定成员初始值设定项。对于没有成员初始值设定项的匿名联合或变体成员,不会执行任何初始化。