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

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

Barbara Streisand
發布: 2024-11-21 00:49:13
原創
573 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板