cppcoreguidelines-prefer-member-initializer¶
查找构造函数体中可以转换为构造函数成员初始化器的成员初始化。这不仅提高了代码的可读性,还对性能产生了积极影响。在控制语句内或第一个控制语句之后进行的类成员赋值会被忽略。
此检查实现了 C++ 核心准则中的 C.49。
请注意,此检查不强制执行 C++ 核心准则中的 C.48 规则。为此,请参见检查 modernize-use-default-member-init。
示例 1¶
class C {
int n;
int m;
public:
C() {
n = 1; // Literal in default constructor
if (dice())
return;
m = 1;
}
};
这里 n
可以通过构造函数初始化列表进行初始化,而 m
则不行,因为 m
的初始化紧随控制语句 (if
) 之后。
class C {
int n;
int m;
public:
C(): n(1) {
if (dice())
return;
m = 1;
}
};
示例 2¶
class C {
int n;
int m;
public:
C(int nn, int mm) {
n = nn; // Neither default constructor nor literal
if (dice())
return;
m = mm;
}
};
这里 n
可以通过构造函数初始化列表进行初始化,而 m
则不行,因为 m
的初始化紧随控制语句 (if
) 之后。
C(int nn, int mm) : n(nn) {
if (dice())
return;
m = mm;
}