簡體   English   中英

我應該擔心C ++ 17中的Wmissing-field-initializers和聚合初始化嗎?

[英]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::AC::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.

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