1

考虑到这个程序:

#include <iostream>

class C
{
public:
    C(void): a(1)
    { a=2; }
    int a{3};
};

int main(void)
{
    C c{};
    std::cout << c.a; // 2
}

我可以看到三种形式的数据成员初始化:

  1. 使用成员初始化器列表
  2. 使用构造函数
  3. 在类主体中使用声明

什么时候用哪个?

4

2 回答 2

3

1:在类体中使用声明

当成员将始终使用相同的值初始化时,您应该使用它,并且必须为每个构造函数显式编写它是没有意义的。

2:使用成员初始化器列表

对于缺少默认构造函数的成员,成员初始化器列表显然是必需的,但除此之外,如果您正在基于构造函数初始化成员,那么在这里执行它是有意义的。

3:使用构造函数体

构造函数体对于无法在单个语句中(在 init-list 中)执行的逻辑更有用。但是,我认为在成员初始化器列表或构造器主体中初始化 POD 并没有太大区别。

于 2016-02-25T04:55:18.770 回答
2

我的建议是使用:

int a{3};

这确保无论您在类中有多少构造函数,都a将其初始化。3

我的第二个选择是使用成员初始化列表。

c(void) : a(1) {}

第三个选项,使用代码设置成员变量的值,应该避免。

于 2016-02-25T04:55:37.523 回答