在C ++ 11中,我们有两种方法来初始化类/结构的数据成员,如以下示例所示:
struct A
{
int n = 7;
};
struct B
{
int n;
B() : n(7) {}
};
问题1:
哪种方式更好?
问题2:
现代C ++风格的检查器是不是鼓励传统方式(后者)?
答案 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成员,而且适用于初始化程序列表和构造函数参数。