cppcheck: 成员变量未在构造函数中初始化

cppcheck: member variable not initialized in the constructor

据我所知,以下代码正确初始化了派生的变量 class B:

#include <utility>

struct A {
  int i;
};

struct B : A {
  int j;
  explicit B(A&& a) : A(std::move(a)), j{i} { }
};

int main()
{
  A a{3};
  B b(std::move(a));

  return 0;
}

运行 cppcheck--enable=all 给出警告:

[test.cpp:9]: (warning) Member variable 'A::i' is not initialized in the constructor. Maybe it should be initialized directly in the class A?

这个(我认为是假的)警告有什么原因吗?

是的,这看起来像是误报。基础 class 子对象在直接成员子对象之前初始化,并且 A(std::move(a)) 将使用隐式移动构造函数,它使用 a.i 初始化 this->i,因此 this->i 将在执行 this->j 的初始化(读取 this->i)。

main中构造函数的参数也是通过聚合初始化完全初始化的,所以a.i的值也不会不确定。