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;
}