首頁 >後端開發 >C++ >具有非靜態成員初始化器的類別可以在 C 中聚合初始化嗎?

具有非靜態成員初始化器的類別可以在 C 中聚合初始化嗎?

Barbara Streisand
Barbara Streisand原創
2024-11-21 00:49:13601瀏覽

Can Classes with Non-Static Member Initializers Be Aggregate Initialized in C  ?

具有非靜態成員初始化器的類別的聚合初始化

在C 中,聚合初始化是初始化類別或類別的成員的便捷文法. struct 而不明確地呼叫建構函式。然而,類別內成員初始值設定項的使用引發了類別/結構是否仍然是聚合的問題。

C 11 和聚合狀態

根據 C 11 標準中,具有類內成員初始值設定項可防止類別/結構被視為聚合。這是因為成員初始值設定項類似於使用者定義的建構函數,而在聚合中不允許使用這些建構函數。

struct A {
  int a = 3;
  int b = 3;
};

A a{0, 1}; // Invalid for C++11

C 14 和聚合初始化

但是,在C 14中,這個限制被取消了。現在允許具有非靜態成員初始值設定項的類別/結構進行聚合初始化。進行此更改是為了解決開發人員回饋並簡化對聚合初始化的理解。

struct A {
  int a = 3;
  int b = 3;
};

A a{0, 1}; // Valid for C++14

G 對C 14 聚合的支援

請注意,G 版本5.0 及更高版本支援具有非靜態初始值設定項的類別成員/結構的C 14 聚合初始化。然而,舊版的 G 可能無法辨識此語法。

以上是具有非靜態成員初始化器的類別可以在 C 中聚合初始化嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn