C ++与Initializer List一件事,什么时候使用普通的构造函数?

msm*_*114 1 c++

我最近才刚开始回到C ++,并了解了初始化列表。这似乎是初始化成员的标准方法。话虽如此,我对此有两个问题:

  1. 设置私有成员变量时(并且仅在构造函数中使用老式的设置)时,是否有理由不使用此方法。

  2. 我们从中得到什么确切的好处?有人告诉我“速度”,但为什么不呢?

编辑:作为参考,我更具体地讲使用它们进行类初始化。

小智 9

初始化列表与调用成员变量的ctor有关。如果进行分配,则通过使用assign函数来更改实例的值。显然,这两个是不同的功能。

在某些情况下,您无法将值分配给ctor中的成员变量。

  • 当成员变量为const时。
  • 当成员变量是没有默认ctor的类的实例时。
  • 当成员变量是引用时(与上述原因相同)
  • 初始化基类

当创建不带init-list的实例时,成员变量将运行其ctor,然后如果您为其赋值,则进行赋值。这是一个细微的差异,但是由于ctor首先运行,而Assign运行2nd,则可能会产生一定的损失-这是不必要的开销。

  • 很好的回应。并回答OP的问题:对不能在构造函数本身中初始化的那些成员使用ctor初始化列表。 (2认同)
  • @paulsm4:那将是*所有*成员。构造函数体根本无法初始化任何成员。 (2认同)