如果明确定义构造函数,是否必须初始化类成员?

ash*_*shr 4 c++ constructor initialization class-members

我的大学课程书指出:

为类声明构造函数时,类对象的初始化变为必需的.

链接到本书特定页面.

我们可以声明do-nothing构造函数,因此初始化肯定不是强制性的,或者是它?

如果没有,那么作者是否应该在风格上意味着我们应该在我们明确声明构造函数时初始化类成员,也就是说,它是作为规则还是指南?

Luc*_*ore 6

为类声明构造函数时,类对象的初始化变为必需的.

这是真的,但初始化不必是明确的.请注意术语objects而不是member.

如果您没有明确地执行此类类型成员将默认初始化.

class A {};
class B
{
   A a;
   int x;
   B()
   {
      //a is initialized here, although you didn't do it explicitly

      //x is not initialized, nor is it mandatory to initialize it
      //but x is not an object
   }
};
Run Code Online (Sandbox Code Playgroud)

当然,"强制性"是一个强有力的词.初始化并不是强制性的x,但在您这样做之前,您无法对其进行任何操作.:)


For*_*veR 6

我们必须在构造函数中初始化成员,如果:

  1. 成员没有默认构造函数.
  2. 成员是reference/const-reference.
  3. 成员是const.(感谢阿努比斯先生)

如果我们不想要任何奇怪的行为,应该初始化成员:

  1. 成员是指针
  2. 会员是标准的pod-type

  • 只是为了完成你的列表,必须初始化成员是否也是const (2认同)