![](/img/trans.png)
[英]Can const member variable of class be initialized in a method instead of constructor?
[英]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.