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

时间:2012-08-22 14:49:18

标签: c++ constructor initialization class-members

我的大学课程书指出:

  

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

链接到specific page of the book.

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

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

2 个答案:

答案 0 :(得分: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
   }
};

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

答案 1 :(得分:6)

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

  1. 会员没有默认构造函数。
  2. 会员是参考/ const-reference。
  3. 会员是const。 (感谢Mr.Anubis)
  4. 如果我们不想要任何奇怪的行为,应该初始化成员:

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