假定在类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初始化列表中似乎没有任何值,因为在我们声明其默认构造函数并返回空向量时会调用它的默认构造函数。
假定在类ctor上假设初始化一个空向量的合适方法(如果有)是哪种?
它们都是有效的。
这主要是风格问题。如果您确实想在构造函数成员初始化器列表中显式设置所有类成员,则可能包含初始化A
以保持一致性,否则,std::vector
将自动调用默认构造函数。
通常,只有需要某种非默认初始化的成员才能进入成员初始化器列表:
在构成构造函数功能体的复合语句开始执行之前,所有直接基数,虚拟基数和非静态数据成员的初始化已完成。成员初始化程序列表是可以指定这些对象的非默认初始化的位置。对于无法默认初始化的成员(例如引用成员和const限定类型的成员),必须指定成员初始化程序。没有成员初始化程序的匿名联合或变体成员不执行任何初始化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句