如果构造函数是显式定义的,那么初始化类成员是强制性的吗

Is it mandatory to initialize class members if a constructor is explicitly defined?

本文关键字:初始化 强制性 成员 构造函数 定义 如果      更新时间:2023-10-16

我的大学课程书上说:

当为类声明构造函数时,类对象的初始化将成为强制性的。

链接到该书的特定页面。

我们可以声明什么都不做的构造函数,因此初始化肯定不是强制性的,或者是吗?

如果不是,作者的意思是,如果我们显式声明构造函数,那么在风格上我们应该初始化类成员吗?也就是说,这是一条规则还是一条准则?

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

  1. 成员没有默认构造函数
  2. 成员是引用/常量引用
  3. 成员为常量。(感谢阿努比斯先生)

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

  1. 成员是指针
  2. 成员为标准吊舱类型

当为类声明构造函数时,类对象的初始化将成为强制性的。

这是真的,但初始化不必是显式的。请注意术语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
   }
};

当然,"强制性"是一个很强的词。初始化x不是强制性的,但在初始化之前不能对其执行任何操作。:)