c++ 中的类成员初始化列表必须完整吗?还是他们可以简单地初始化一个类中的一个或两个成员数据?
提前致谢!
它们不必是完整的。您可以省略默认可构造的基类和非POD类类型,但 POD 类型将保持未初始化状态。
显然,常量成员和引用必须在成员初始化列表中进行初始化。
int
确实有一个构造函数,请参阅 Stroustrup The C++ Programming Language 部分 6.2.8
int j = int();
这将 j 初始化为 0(显式使用内置类型的构造函数的值是 0 转换为该类型,因此 int() 是另一种写 0 的方式。内置类型的默认构造函数很重要,因此模板可以毫无顾虑地调用默认构造函数,即使对于内置类型也是如此。
不,它们不必是完整的 - 任何未在其中指定的成员都将是默认构造的(这包括任何基类)。
显然,任何不可默认构造的成员都必须显式初始化。还有一个小问题 - 整数或浮点数等类型不会被初始化,因此它们的初始值将是未定义的。