[英]Should I be worried about Wmissing-field-initializers and aggregate initialization in C++17?
我用GCC編譯了一些代碼,啟用了-Wall
和-Wextra
。 此代碼生成警告:
struct A { A(int) {} };
struct B {};
struct C : A, B {};
int main() {
(void) C{1};
}
main.cpp: In function 'int main()': main.cpp:11:15: warning: missing initializer for member 'C::<anonymous>' [-Wmissing-field-initializers] (void) C{1}; ^
我應該擔心嗎? 這是GCC輸出此警告的錯誤嗎? 似乎我沒有要初始化的字段,也沒有缺少參數。
C ++ 17允許您對具有基類的類執行聚合初始化。 每個基類都被有效地視為成員(它們位於類的直接成員之前)。 因此,為了聚合初始化, C
有兩個“成員”: C::A
和C::B
你只初始化了一個。
哦,當然, B
實際上沒有任何東西要初始化。 但對於-Wall
,它與此無異:
struct C
{
A a;
B b;
};
(void) C{1};
這也會發出警告。 在任何一種情況下,你都可以通過為B
提供顯式初始化器來使其靜音:( (void)C{1, {}};
。
但就標准而言,這是完全有效的代碼。 B
將初始化值。 在任一情況下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.