簡體   English   中英

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

使用--enable=all運行cppcheck會發出警告:

[test.cpp:9]:(警告)成員變量“A::i”未在構造函數中初始化。 也許應該直接在class A上初始化?

這個(我認為是錯誤的)警告有理由嗎?

是的,這看起來像是誤報。 Base class 子對象在直接成員子對象之前被初始化,並且A(std::move(a))將使用隱式移動構造函數,它用ai初始化this->i ,因此this->i將在this->j的初始化之前被初始化this->j被執行(讀取this->i )。

main中構造函數的參數也通過聚合初始化完全初始化,因此ai的值也不會不確定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM