从 C++2003 开始,我们有值初始化和默认初始化。意思是:
struct Foo {
int i;
std :: string s;
};
Foo f1; // f1.s is default-constructed, f1.i is uninitialised
Foo f2 = Foo (); // f1.s is default-constructed, f1.i is zero
正确的?
现在假设我有这门课
class Bar : public Foo {
int n;
Foo f [SIZE];
public:
Bar ();
};
当我为 编写构造函数时Bar
,我可能希望对父类或f[]
成员进行默认或值初始化。我认为初始化父母的选择很简单:
Bar :: Bar () : Foo (), n (-1) {} // Parent is value-initialised (Foo::i is zero)
Bar :: Bar () : n (-1) {} // Parent is default-initialised (Foo::i is undefined)
但是f[]
会员呢?
- 如何默认初始化所有成员?
- 如何对所有成员进行值初始化?
- 如果我使用 C++11 初始化器列表,如果初始化器列表的大小与 不同,会发生什么情况
SIZE
?