如何在C ++ 11中正确初始化数据成员?

时间:2016-11-25 08:29:38

标签: c++ c++11 constructor initialization styles

在C ++ 11中,我们有两种方法来初始化类/结构的数据成员,如以下示例所示:

struct A
{
    int n = 7;
};

struct B
{
    int n;

    B() : n(7) {}
};

问题1:

哪种方式更好?

问题2:

现代C ++风格的检查器是不是鼓励传统方式(后者)?

3 个答案:

答案 0 :(得分:3)

你实际上可以混合这两种风格。如果你有多个构造函数,这很有用,但变量只是由一个或几个构造函数专门初始化。

实施例

struct A
{
    int n = 7;

    A() {}  // n will be initialized to 7
    A(int n_): n{n_} {}  // Initialize n to something else
};

答案 1 :(得分:2)

我不确定,但我认为第一种情况只能用C ++原语类型。在大多数书籍中,特别是在书中提到Scott Meyers改进C ++代码的55种方法,建议先通过第一种方式,所以我会坚持这一点。 : - )

不要忘记,评估和初始化的顺序决定了如何对类中的成员进行排序。

我更喜欢第二种初始化方式。

答案 2 :(得分:0)

然而,两种方式都不是更好,新的统一初始化具有与其他语言相似的特权,而且总体上更容易理解。统一初始化不仅适用于struct成员,而且适用于初始化程序列表和构造函数参数。